00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
#include <kdebug.h>
00025
#include <kapplication.h>
00026
#include <kconfig.h>
00027
#include <klocale.h>
00028
#include "resource.h"
00029
00030
using namespace KRES;
00031
00032
class Resource::ResourcePrivate
00033 {
00034
public:
00035
#ifdef QT_THREAD_SUPPORT
00036
QMutex mMutex;
00037
#endif
00038
int mOpenCount;
00039
QString mType;
00040
QString mIdentifier;
00041
bool mReadOnly;
00042
QString mName;
00043
bool mActive;
00044
bool mIsOpen;
00045 };
00046
00047 Resource::Resource(
const KConfig* config )
00048 :
QObject( 0, "" ), d( new ResourcePrivate )
00049 {
00050 d->mOpenCount = 0;
00051 d->mIsOpen =
false;
00052
00053
if ( config ) {
00054 d->mType = config->readEntry(
"ResourceType" );
00055 d->mName = config->readEntry(
"ResourceName" );
00056 d->mReadOnly = config->readBoolEntry(
"ResourceIsReadOnly",
false );
00057 d->mActive = config->readBoolEntry(
"ResourceIsActive",
true );
00058 d->mIdentifier = config->readEntry(
"ResourceIdentifier" );
00059 }
else {
00060 d->mType =
"type";
00061 d->mName = i18n(
"resource");
00062 d->mReadOnly =
false;
00063 d->mActive =
true;
00064 d->mIdentifier = KApplication::randomString( 10 );
00065 }
00066 }
00067
00068 Resource::~Resource()
00069 {
00070
delete d;
00071 d = 0;
00072 }
00073
00074
void Resource::writeConfig( KConfig* config )
00075 {
00076 kdDebug(5650) <<
"Resource::writeConfig()" << endl;
00077
00078 config->writeEntry(
"ResourceType", d->mType );
00079 config->writeEntry(
"ResourceName", d->mName );
00080 config->writeEntry(
"ResourceIsReadOnly", d->mReadOnly );
00081 config->writeEntry(
"ResourceIsActive", d->mActive );
00082 config->writeEntry(
"ResourceIdentifier", d->mIdentifier );
00083 }
00084
00085
bool Resource::open()
00086 {
00087 d->mIsOpen =
true;
00088
#ifdef QT_THREAD_SUPPORT
00089
QMutexLocker guard( &(d->mMutex) );
00090
#endif
00091
if ( !d->mOpenCount ) {
00092 kdDebug(5650) <<
"Opening resource " << resourceName() << endl;
00093 d->mIsOpen = doOpen();
00094 }
00095 d->mOpenCount++;
00096
return d->mIsOpen;
00097 }
00098
00099
void Resource::close()
00100 {
00101
#ifdef QT_THREAD_SUPPORT
00102
QMutexLocker guard( &(d->mMutex) );
00103
#endif
00104
if ( !d->mOpenCount ) {
00105 kdDebug(5650) <<
"ERROR: Resource " << resourceName() <<
" closed more times than previously opened" << endl;
00106
return;
00107 }
00108 d->mOpenCount--;
00109
if ( !d->mOpenCount ) {
00110 kdDebug(5650) <<
"Closing resource " << resourceName() << endl;
00111 doClose();
00112 d->mIsOpen =
false;
00113 }
else {
00114 kdDebug(5650) <<
"Not yet closing resource " << resourceName() <<
", open count = " << d->mOpenCount << endl;
00115 }
00116 }
00117
00118
bool Resource::isOpen()
const
00119
{
00120
return d->mIsOpen;
00121 }
00122
00123
void Resource::setIdentifier(
const QString& identifier )
00124 {
00125 d->mIdentifier = identifier;
00126 }
00127
00128
QString Resource::identifier()
const
00129
{
00130
return d->mIdentifier;
00131 }
00132
00133
void Resource::setType(
const QString& type )
00134 {
00135 d->mType = type;
00136 }
00137
00138
QString Resource::type()
const
00139
{
00140
return d->mType;
00141 }
00142
00143
void Resource::setReadOnly(
bool value )
00144 {
00145 d->mReadOnly = value;
00146 }
00147
00148
bool Resource::readOnly()
const
00149
{
00150
return d->mReadOnly;
00151 }
00152
00153
void Resource::setResourceName(
const QString &name )
00154 {
00155 d->mName = name;
00156 }
00157
00158
QString Resource::resourceName()
const
00159
{
00160
return d->mName;
00161 }
00162
00163
void Resource::setActive(
bool value )
00164 {
00165 d->mActive = value;
00166 }
00167
00168
bool Resource::isActive()
const
00169
{
00170
return d->mActive;
00171 }
00172
00173
void Resource::dump()
const
00174
{
00175 kdDebug(5650) <<
"Resource:" << endl;
00176 kdDebug(5650) <<
" Name: " << d->mName << endl;
00177 kdDebug(5650) <<
" Identifier: " << d->mIdentifier << endl;
00178 kdDebug(5650) <<
" Type: " << d->mType << endl;
00179 kdDebug(5650) <<
" OpenCount: " << d->mOpenCount << endl;
00180 kdDebug(5650) <<
" ReadOnly: " << ( d->mReadOnly ?
"yes" :
"no" ) << endl;
00181 kdDebug(5650) <<
" Active: " << ( d->mActive ?
"yes" :
"no" ) << endl;
00182 kdDebug(5650) <<
" IsOpen: " << ( d->mIsOpen ?
"yes" :
"no" ) << endl;
00183 }
00184
00185
#include "resource.moc"