281 lines
13 KiB
Java
281 lines
13 KiB
Java
<?xml version="1.0" encoding="UTF-8"?>
|
|
<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
|
|
<script:module xmlns:script="http://openoffice.org/2000/script" script:name="SF_Platform" script:language="StarBasic" script:moduleType="normal">REM =======================================================================================================================
|
|
REM === The ScriptForge library and its associated libraries are part of the LibreOffice project. ===
|
|
REM === Full documentation is available on https://help.libreoffice.org/ ===
|
|
REM =======================================================================================================================
|
|
|
|
Option Compatible
|
|
Option Explicit
|
|
|
|
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
|
|
''' SF_Platform
|
|
''' ===========
|
|
''' Singleton class implementing the "ScriptForge.Platform" service
|
|
''' Implemented as a usual Basic module
|
|
'''
|
|
''' A collection of properties about the execution environment:
|
|
''' - HW platform
|
|
''' - Operating System
|
|
''' - current user
|
|
''' - LibreOffice version
|
|
'''
|
|
''' Service invocation example:
|
|
''' Dim platform As Variant
|
|
''' platform = CreateScriptService("Platform")
|
|
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
|
|
|
|
REM ================================================================== EXCEPTIONS
|
|
|
|
REM ============================================================ MODULE CONSTANTS
|
|
|
|
REM ===================================================== CONSTRUCTOR/DESTRUCTOR
|
|
|
|
REM -----------------------------------------------------------------------------
|
|
Public Function Dispose() As Variant
|
|
Set Dispose = Nothing
|
|
End Function ' ScriptForge.SF_Array Explicit destructor
|
|
|
|
REM ================================================================== PROPERTIES
|
|
|
|
REM -----------------------------------------------------------------------------
|
|
Property Get Architecture() As String
|
|
''' Returns the actual bit architecture
|
|
''' Example:
|
|
''' MsgBox platform.Architecture ' 64bit
|
|
Architecture = _PropertyGet("Architecture")
|
|
End Property ' ScriptForge.SF_Platform.Architecture (get)
|
|
|
|
REM -----------------------------------------------------------------------------
|
|
Property Get ComputerName() As String
|
|
''' Returns the computer's network name
|
|
''' Example:
|
|
''' MsgBox platform.ComputerName
|
|
ComputerName = _PropertyGet("ComputerName")
|
|
End Property ' ScriptForge.SF_Platform.ComputerName (get)
|
|
|
|
REM -----------------------------------------------------------------------------
|
|
Property Get CPUCount() As Integer
|
|
''' Returns the number of Central Processor Units
|
|
''' Example:
|
|
''' MsgBox platform.CPUCount ' 4
|
|
CPUCount = _PropertyGet("CPUCount")
|
|
End Property ' ScriptForge.SF_Platform.CPUCount (get)
|
|
|
|
REM -----------------------------------------------------------------------------
|
|
Property Get CurrentUser() As String
|
|
''' Returns the name of logged in user
|
|
''' Example:
|
|
''' MsgBox platform.CurrentUser
|
|
CurrentUser = _PropertyGet("CurrentUser")
|
|
End Property ' ScriptForge.SF_Platform.CurrentUser (get)
|
|
|
|
REM -----------------------------------------------------------------------------
|
|
Property Get Machine() As String
|
|
''' Returns the machine type like 'i386' or 'x86_64'
|
|
''' Example:
|
|
''' MsgBox platform.Machine
|
|
Machine = _PropertyGet("Machine")
|
|
End Property ' ScriptForge.SF_Platform.Machine (get)
|
|
|
|
REM -----------------------------------------------------------------------------
|
|
Property Get ObjectType As String
|
|
''' Only to enable object representation
|
|
ObjectType = "SF_Platform"
|
|
End Property ' ScriptForge.SF_Platform.ObjectType
|
|
|
|
REM -----------------------------------------------------------------------------
|
|
Property Get ServiceName As String
|
|
''' Internal use
|
|
ServiceName = "ScriptForge.Platform"
|
|
End Property ' ScriptForge.SF_Platform.ServiceName
|
|
|
|
REM -----------------------------------------------------------------------------
|
|
Property Get OfficeVersion() As String
|
|
''' Returns the office software version in the form 'LibreOffice w.x.y.z (The Document Foundation)'
|
|
''' Example:
|
|
''' MsgBox platform.OfficeVersion
|
|
OfficeVersion = _PropertyGet("OfficeVersion")
|
|
End Property ' ScriptForge.SF_Platform.OfficeVersion (get)
|
|
|
|
REM -----------------------------------------------------------------------------
|
|
Property Get OSName() As String
|
|
''' Returns the name of the operating system like 'Linux' or 'Windows'
|
|
''' Example:
|
|
''' MsgBox platform.OSName
|
|
OSName = _PropertyGet("OSName")
|
|
End Property ' ScriptForge.SF_Platform.OSName (get)
|
|
|
|
REM -----------------------------------------------------------------------------
|
|
Property Get OSPlatform() As String
|
|
''' Returns a single string identifying the underlying platform with as much useful and human-readable information as possible
|
|
''' Example:
|
|
''' MsgBox platform.OSPlatform ' Linux-4.15.0-117-generic-x86_64-with-Ubuntu-18.04-bionic
|
|
OSPlatform = _PropertyGet("OSPlatform")
|
|
End Property ' ScriptForge.SF_Platform.OSPlatform (get)
|
|
|
|
REM -----------------------------------------------------------------------------
|
|
Property Get OSRelease() As String
|
|
''' Returns the operating system's release
|
|
''' Example:
|
|
''' MsgBox platform.OSRelease ' 4.15.0-117-generic
|
|
OSRelease = _PropertyGet("OSRelease")
|
|
End Property ' ScriptForge.SF_Platform.OSRelease (get)
|
|
|
|
REM -----------------------------------------------------------------------------
|
|
Property Get OSVersion() As String
|
|
''' Returns the name of the operating system build or version
|
|
''' Example:
|
|
''' MsgBox platform.OSVersion ' #118-Ubuntu SMP Fri Sep 4 20:02:41 UTC 2020
|
|
OSVersion = _PropertyGet("OSVersion")
|
|
End Property ' ScriptForge.SF_Platform.OSVersion (get)
|
|
|
|
REM -----------------------------------------------------------------------------
|
|
Property Get Processor() As String
|
|
''' Returns the (real) processor name, e.g. 'amdk6'. Might return the same value as Machine
|
|
''' Example:
|
|
''' MsgBox platform.Processor
|
|
Processor = _PropertyGet("Processor")
|
|
End Property ' ScriptForge.SF_Platform.Processor (get)
|
|
|
|
REM ===================================================================== METHODS
|
|
|
|
REM -----------------------------------------------------------------------------
|
|
Public Function GetProperty(Optional ByVal PropertyName As Variant) As Variant
|
|
''' Return the actual value of the given property
|
|
''' Args:
|
|
''' PropertyName: the name of the property as a string
|
|
''' Returns:
|
|
''' The actual value of the property
|
|
''' If the property does not exist, returns Null
|
|
''' Exceptions:
|
|
''' ARGUMENTERROR The property does not exist
|
|
|
|
Const cstThisSub = "Platform.GetProperty"
|
|
Const cstSubArgs = ""
|
|
|
|
If SF_Utils._ErrorHandling() Then On Local Error GoTo Catch
|
|
GetProperty = Null
|
|
|
|
Check:
|
|
If SF_Utils._EnterFunction(cstThisSub, cstSubArgs) Then
|
|
If Not SF_Utils._Validate(PropertyName, "PropertyName", V_STRING, Properties()) Then GoTo Catch
|
|
End If
|
|
|
|
Try:
|
|
GetProperty = _PropertyGet(PropertyName)
|
|
|
|
Finally:
|
|
SF_Utils._ExitFunction(cstThisSub)
|
|
Exit Function
|
|
Catch:
|
|
GoTo Finally
|
|
End Function ' ScriptForge.SF_Platform.GetProperty
|
|
|
|
REM -----------------------------------------------------------------------------
|
|
Public Function Methods() As Variant
|
|
''' Return the list of public methods of the Model service as an array
|
|
|
|
Methods = Array( _
|
|
)
|
|
|
|
End Function ' ScriptForge.SF_Platform.Methods
|
|
|
|
REM -----------------------------------------------------------------------------
|
|
Public Function Properties() As Variant
|
|
''' Return the list or properties of the Platform class as an array
|
|
|
|
Properties = Array( _
|
|
"Architecture" _
|
|
, "ComputerName" _
|
|
, "CPUCount" _
|
|
, "CurrentUser" _
|
|
, "Machine" _
|
|
, "OfficeVersion" _
|
|
, "OSName" _
|
|
, "OSPlatform" _
|
|
, "OSRelease" _
|
|
, "OSVersion" _
|
|
, "Processor" _
|
|
)
|
|
|
|
End Function ' ScriptForge.SF_Platform.Properties
|
|
|
|
REM =========================================================== PRIVATE FUNCTIONS
|
|
|
|
REM -----------------------------------------------------------------------------
|
|
Public Function _GetProductName() as String
|
|
''' Returns Office product and version numbers found in configuration registry
|
|
''' Derived from the Tools library
|
|
|
|
Dim oProdNameAccess as Object ' configmgr.RootAccess
|
|
Dim sProdName as String
|
|
Dim sVersion as String
|
|
Dim sVendor As String
|
|
|
|
On Local Error GoTo Catch ' Prevent any error
|
|
_GetProductName = ""
|
|
|
|
Try:
|
|
Set oProdNameAccess = SF_Utils._GetRegistryKeyContent("org.openoffice.Setup/Product")
|
|
|
|
sProdName = oProdNameAccess.ooName
|
|
sVersion = oProdNameAccess.ooSetupVersionAboutBox
|
|
sVendor = oProdNameAccess.ooVendor
|
|
|
|
_GetProductName = sProdName & " " & sVersion & " (" & sVendor & ")"
|
|
|
|
Finally:
|
|
Exit Function
|
|
Catch:
|
|
GoTo Finally
|
|
End Function ' ScriptForge.SF_Platform._GetProductName
|
|
|
|
REM -----------------------------------------------------------------------------
|
|
Private Function _PropertyGet(Optional ByVal psProperty As String) As Variant
|
|
''' Return the value of the named property
|
|
''' Args:
|
|
''' psProperty: the name of the property
|
|
|
|
Dim sOSName As String ' Operating system
|
|
|
|
Const cstPyHelper = "$" & "_SF_Platform"
|
|
Dim cstThisSub As String
|
|
Const cstSubArgs = ""
|
|
|
|
cstThisSub = "Platform.get" & psProperty
|
|
SF_Utils._EnterFunction(cstThisSub, cstSubArgs)
|
|
|
|
Select Case psProperty
|
|
Case "Architecture", "ComputerName", "CPUCount", "CurrentUser", "Machine" _
|
|
, "OSPlatform", "OSRelease", "OSVersion", "Processor"
|
|
With ScriptForge.SF_Session
|
|
_PropertyGet = .ExecutePythonScript(.SCRIPTISSHARED, _SF_.PythonHelper & cstPyHelper, psProperty)
|
|
End With
|
|
Case "OfficeVersion"
|
|
_PropertyGet = _GetProductName()
|
|
Case "OSName"
|
|
' Calc INFO function preferred to Python script to avoid ScriptForge initialization risks when Python is not installed
|
|
sOSName = _SF_.OSName
|
|
If sOSName = "" Then
|
|
sOSName = SF_Session.ExecuteCalcFunction("INFO", "system")
|
|
Select Case sOSName
|
|
Case "WNT" : sOSName = "Windows"
|
|
Case "MACOSX" : sOSName = "macOS"
|
|
Case "LINUX" : sOSName = "Linux"
|
|
Case "SOLARIS" : sOSName = "Solaris"
|
|
Case Else : sOSName = SF_String.Capitalize(sOSName)
|
|
End Select
|
|
EndIf
|
|
_PropertyGet = sOSName
|
|
Case Else
|
|
_PropertyGet = Null
|
|
End Select
|
|
|
|
Finally:
|
|
SF_Utils._ExitFunction(cstThisSub)
|
|
Exit Function
|
|
End Function ' ScriptForge.SF_Platform._PropertyGet
|
|
|
|
REM ============================================ END OF SCRIPTFORGE.SF_PLATFORM
|
|
</script:module> |