blob: 91d9b64ab24b53401e838110e6c6807f67851e6f [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_unotools.hxx"
#ifndef GCC
#endif
#ifndef _unotools_JAVAPTIONS_HXX
#include <unotools/javaoptions.hxx>
#endif
#include <com/sun/star/uno/Any.h>
#include <com/sun/star/uno/Sequence.hxx>
#include <rtl/logfile.hxx>
using namespace ::com::sun::star::uno;
using namespace ::rtl;
#define C2U(cChar) OUString::createFromAscii(cChar)
#define CFG_READONLY_DEFAULT sal_False
/* -----------------------------10.04.01 12:39--------------------------------
---------------------------------------------------------------------------*/
class SvtExecAppletsItem_Impl : public utl::ConfigItem
{
sal_Bool bExecute;
sal_Bool bRO;
public:
SvtExecAppletsItem_Impl();
virtual void Commit();
void Notify( const Sequence< rtl::OUString >& );
sal_Bool IsExecuteApplets() const {return bExecute;}
void SetExecuteApplets(sal_Bool bSet);
sal_Bool IsReadOnly() const {return bRO;}
};
/* -----------------------------10.02.2003 07:46------------------------------
---------------------------------------------------------------------------*/
void SvtExecAppletsItem_Impl::SetExecuteApplets(sal_Bool bSet)
{
OSL_ENSURE(!bRO, "SvtExecAppletsItem_Impl::SetExecuteApplets()\nYou tried to write on a readonly value!\n");
if (!bRO)
{
bExecute = bSet;
SetModified();
}
}
/* -----------------------------18.05.01 14:44--------------------------------
---------------------------------------------------------------------------*/
SvtExecAppletsItem_Impl::SvtExecAppletsItem_Impl() :
utl::ConfigItem(C2U("Office.Common/Java/Applet")),
bExecute (sal_False ),
bRO (CFG_READONLY_DEFAULT )
{
RTL_LOGFILE_CONTEXT(aLog, "unotools SvtExecAppletsItem_Impl::SvtExecAppletsItem_Impl()");
Sequence< OUString > aNames(1);
aNames.getArray()[0] = C2U("Enable");
Sequence< Any > aValues = GetProperties(aNames);
Sequence< sal_Bool > aROStates = GetReadOnlyStates(aNames);
const Any* pValues = aValues.getConstArray();
const sal_Bool* pROStates = aROStates.getConstArray();
if(aValues.getLength() && aROStates.getLength() && pValues[0].hasValue())
{
bExecute = *(sal_Bool*)pValues[0].getValue();
bRO = pROStates[0];
}
}
void SvtExecAppletsItem_Impl::Commit()
{
if (bRO)
return;
Sequence< OUString > aNames(1);
aNames.getArray()[0] = C2U("Enable");
Sequence< Any > aValues(1);
aValues.getArray()[0].setValue(&bExecute, ::getBooleanCppuType());
PutProperties(aNames, aValues);
}
void SvtExecAppletsItem_Impl::Notify( const Sequence< rtl::OUString >& )
{
// no listeners supported yet
}
struct SvtJavaOptions_Impl
{
SvtExecAppletsItem_Impl aExecItem;
Sequence<OUString> aPropertyNames;
sal_Bool bEnabled;
sal_Bool bSecurity;
sal_Int32 nNetAccess;
rtl::OUString sUserClassPath;
sal_Bool bROEnabled;
sal_Bool bROSecurity;
sal_Bool bRONetAccess;
sal_Bool bROUserClassPath;
SvtJavaOptions_Impl() :
aPropertyNames(4),
bEnabled (sal_False),
bSecurity (sal_False),
nNetAccess (0),
bROEnabled (CFG_READONLY_DEFAULT),
bROSecurity (CFG_READONLY_DEFAULT),
bRONetAccess (CFG_READONLY_DEFAULT),
bROUserClassPath (CFG_READONLY_DEFAULT)
{
OUString* pNames = aPropertyNames.getArray();
pNames[0] = C2U("Enable");
pNames[1] = C2U("Security");
pNames[2] = C2U("NetAccess");
pNames[3] = C2U("UserClassPath");
}
};
/* -----------------------------18.05.01 13:28--------------------------------
---------------------------------------------------------------------------*/
SvtJavaOptions::SvtJavaOptions() :
utl::ConfigItem(C2U("Office.Java/VirtualMachine")),
pImpl(new SvtJavaOptions_Impl)
{
RTL_LOGFILE_CONTEXT(aLog, "unotools SvtJavaOptions::SvtJavaOptions()");
Sequence< Any > aValues = GetProperties(pImpl->aPropertyNames);
Sequence< sal_Bool > aROStates = GetReadOnlyStates(pImpl->aPropertyNames);
const Any* pValues = aValues.getConstArray();
const sal_Bool* pROStates = aROStates.getConstArray();
if ( aValues.getLength() == pImpl->aPropertyNames.getLength() && aROStates.getLength() == pImpl->aPropertyNames.getLength() )
{
for ( int nProp = 0; nProp < pImpl->aPropertyNames.getLength(); nProp++ )
{
if( pValues[nProp].hasValue() )
{
switch ( nProp )
{
case 0: pImpl->bEnabled = *(sal_Bool*)pValues[nProp].getValue(); break;
case 1: pImpl->bSecurity = *(sal_Bool*)pValues[nProp].getValue();break;
case 2: pValues[nProp] >>= pImpl->nNetAccess; break;
case 3: pValues[nProp] >>= pImpl->sUserClassPath; break;
}
}
}
pImpl->bROEnabled = pROStates[0];
pImpl->bROSecurity = pROStates[1];
pImpl->bRONetAccess = pROStates[2];
pImpl->bROUserClassPath = pROStates[3];
}
}
/* -----------------------------18.05.01 13:28--------------------------------
---------------------------------------------------------------------------*/
SvtJavaOptions::~SvtJavaOptions()
{
delete pImpl;
}
/*-- 18.05.01 13:28:35---------------------------------------------------
-----------------------------------------------------------------------*/
void SvtJavaOptions::Commit()
{
pImpl->aExecItem.Commit();
sal_Int32 nOrgCount = pImpl->aPropertyNames.getLength();
Sequence< OUString > aNames(nOrgCount);
Sequence< Any > aValues(nOrgCount);
sal_Int32 nRealCount = 0;
const Type& rType = ::getBooleanCppuType();
for(int nProp = 0; nProp < nOrgCount; nProp++)
{
switch(nProp)
{
case 0:
{
if (!pImpl->bROEnabled)
{
aValues[nRealCount].setValue(&pImpl->bEnabled, rType);
aNames[nRealCount] = pImpl->aPropertyNames[nProp];
++nRealCount;
}
}
break;
case 1:
{
if (!pImpl->bROSecurity)
{
aValues[nRealCount].setValue(&pImpl->bSecurity, rType);
aNames[nRealCount] = pImpl->aPropertyNames[nProp];
++nRealCount;
}
}
break;
case 2:
{
if (!pImpl->bRONetAccess)
{
aValues[nRealCount] <<= pImpl->nNetAccess;
aNames[nRealCount] = pImpl->aPropertyNames[nProp];
++nRealCount;
}
}
break;
case 3:
{
if (!pImpl->bROUserClassPath)
{
aValues[nRealCount] <<= pImpl->sUserClassPath;
aNames[nRealCount] = pImpl->aPropertyNames[nProp];
++nRealCount;
}
}
break;
}
}
aValues.realloc(nRealCount);
aNames.realloc(nRealCount);
PutProperties(aNames,aValues);
}
/*-- 18.05.01 13:28:35---------------------------------------------------
-----------------------------------------------------------------------*/
sal_Bool SvtJavaOptions::IsEnabled() const
{
return pImpl->bEnabled;
}
/*-- 18.05.01 13:28:35---------------------------------------------------
-----------------------------------------------------------------------*/
sal_Bool SvtJavaOptions::IsSecurity()const
{
return pImpl->bSecurity;
}
/*-- 18.05.01 13:28:35---------------------------------------------------
-----------------------------------------------------------------------*/
sal_Int32 SvtJavaOptions::GetNetAccess() const
{
return pImpl->nNetAccess;
}
/*-- 18.05.01 13:28:36---------------------------------------------------
-----------------------------------------------------------------------*/
rtl::OUString& SvtJavaOptions::GetUserClassPath()const
{
return pImpl->sUserClassPath;
}
/*-- 18.05.01 13:28:37---------------------------------------------------
-----------------------------------------------------------------------*/
void SvtJavaOptions::SetEnabled(sal_Bool bSet)
{
OSL_ENSURE(!pImpl->bROEnabled, "SvtJavaOptions::SetEnabled()\nYou tried to write on a readonly value!\n");
if(!pImpl->bROEnabled && pImpl->bEnabled != bSet)
{
pImpl->bEnabled = bSet;
SetModified();
}
}
/*-- 18.05.01 13:28:38---------------------------------------------------
-----------------------------------------------------------------------*/
void SvtJavaOptions::SetSecurity(sal_Bool bSet)
{
OSL_ENSURE(!pImpl->bROSecurity, "SvtJavaOptions::SetSecurity()\nYou tried to write on a readonly value!\n");
if(!pImpl->bROSecurity && pImpl->bSecurity != bSet)
{
pImpl->bSecurity = bSet;
SetModified();
}
}
/*-- 18.05.01 13:28:38---------------------------------------------------
-----------------------------------------------------------------------*/
void SvtJavaOptions::SetNetAccess(sal_Int32 nSet)
{
OSL_ENSURE(!pImpl->bRONetAccess, "SvtJavaOptions::SetNetAccess()\nYou tried to write on a readonly value!\n");
if(!pImpl->bRONetAccess && pImpl->nNetAccess != nSet)
{
pImpl->nNetAccess = nSet;
SetModified();
}
}
/*-- 18.05.01 13:28:38---------------------------------------------------
-----------------------------------------------------------------------*/
void SvtJavaOptions::SetUserClassPath(const rtl::OUString& rSet)
{
OSL_ENSURE(!pImpl->bROUserClassPath, "SvtJavaOptions::SetUserClassPath()\nYou tried to write on a readonly value!\n");
if(!pImpl->bROUserClassPath && pImpl->sUserClassPath != rSet)
{
pImpl->sUserClassPath = rSet;
SetModified();
}
}
/*-- 18.05.01 14:34:32---------------------------------------------------
-----------------------------------------------------------------------*/
sal_Bool SvtJavaOptions::IsExecuteApplets() const
{
return pImpl->aExecItem.IsExecuteApplets();
}
/*-- 18.05.01 14:34:32---------------------------------------------------
-----------------------------------------------------------------------*/
void SvtJavaOptions::SetExecuteApplets(sal_Bool bSet)
{
if(!pImpl->aExecItem.IsReadOnly() && pImpl->aExecItem.IsExecuteApplets() != bSet)
{
pImpl->aExecItem.SetExecuteApplets(bSet);
SetModified();
}
}
/*--10.02.2003 08:40---------------------------------------------------
-----------------------------------------------------------------------*/
sal_Bool SvtJavaOptions::IsReadOnly( EOption eOption ) const
{
sal_Bool bRO = sal_True;
switch(eOption)
{
case E_ENABLED :
bRO = pImpl->bROEnabled;
break;
case E_SECURITY :
bRO = pImpl->bROSecurity;
break;
case E_NETACCESS :
bRO = pImpl->bRONetAccess;
break;
case E_USERCLASSPATH :
bRO = pImpl->bROUserClassPath;
break;
case E_EXECUTEAPPLETS :
bRO = pImpl->aExecItem.IsReadOnly();
break;
}
return bRO;
}