1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-08-09 13:22:24 +03:00

0024925: Enabling OCAF persistence without setting environment variables

Add test case bugs/caf/bug24925
Merging with current master IR-2014-07-03
This commit is contained in:
Roman Lygin
2014-07-10 14:47:20 +04:00
committed by apn
parent a9568545f1
commit b6c0b841ec
12 changed files with 225 additions and 32 deletions

View File

@@ -20,7 +20,6 @@ uses
CDM,CDF,TCollection
is
class Driver;
class DriverFactory;

View File

@@ -1,68 +0,0 @@
-- Created on: 1997-01-22
-- Created by: Mister rmi
-- Copyright (c) 1997-1999 Matra Datavision
-- Copyright (c) 1999-2014 OPEN CASCADE SAS
--
-- This file is part of Open CASCADE Technology software library.
--
-- This library is free software; you can redistribute it and/or modify it under
-- the terms of the GNU Lesser General Public License version 2.1 as published
-- by the Free Software Foundation, with special exception defined in the file
-- OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
-- distribution for complete text of the license and disclaimer of any warranty.
--
-- Alternatively, this file may be used under the terms of Open CASCADE
-- commercial license or contractual agreement.
class Driver from FWOSDriver inherits MetaDataDriver from CDF
uses
MetaData from CDM,Document from CDM,
ExtendedString from TCollection,
ExtendedString from TCollection
is
Create
returns Driver from FWOSDriver;
---Purpose: initializes the MetaDatadriver with its specific name.
Find(me: mutable; aFolder, aName, aVersion: ExtendedString from TCollection)
returns Boolean from Standard;
---Purpose: indicate whether a file exists corresponding to the folder and the name
HasReadPermission(me: mutable; aFolder, aName, aVersion: ExtendedString from TCollection)
returns Boolean from Standard;
MetaData(me: mutable; aFolder, aName, aVersion: ExtendedString from TCollection)
returns MetaData from CDM
is private;
CreateMetaData(me: mutable; aDocument: Document from CDM;
aFileName: ExtendedString from TCollection)
returns MetaData from CDM
is private;
FindFolder(me: mutable; aFolder: ExtendedString from TCollection)
returns Boolean from Standard;
DefaultFolder(me: mutable) returns ExtendedString from TCollection;
BuildFileName(me: mutable; aDocument: Document from CDM)
returns ExtendedString from TCollection;
Concatenate(myclass; aFolder,aName: ExtendedString from TCollection)
returns ExtendedString from TCollection
is private;
BuildMetaData(me: mutable; aFileName: ExtendedString from TCollection)
returns MetaData from CDM
is private;
SetName(me: mutable; aDocument: Document from CDM; aName: ExtendedString from TCollection)
returns ExtendedString from TCollection
is redefined;
end Driver from FWOSDriver;

View File

@@ -1,255 +0,0 @@
// Copyright (c) 1999-2014 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#include <FWOSDriver_Driver.ixx>
#include <TCollection_ExtendedString.hxx>
#include <OSD_Path.hxx>
#include <OSD_Directory.hxx>
#include <OSD_Protection.hxx>
#include <OSD_SingleProtection.hxx>
#include <OSD_File.hxx>
#include <OSD_FileNode.hxx>
#include <UTL.hxx>
#include <TCollection_ExtendedString.hxx>
#ifdef WNT
#include <tchar.h>
#endif // WNT
//==============================================================================
//function : PutSlash
//purpose :
//==============================================================================
static void PutSlash (TCollection_ExtendedString& anXSTRING) {
#ifdef WNT
anXSTRING+="\\";
#else
anXSTRING+="/";
#endif // WNT
}
//==============================================================================
//function : FWOSDriver_Driver
//purpose :
//==============================================================================
FWOSDriver_Driver::FWOSDriver_Driver() {}
//==============================================================================
//function : Find
//purpose :
//==============================================================================
Standard_Boolean FWOSDriver_Driver::Find(const TCollection_ExtendedString& aFolder,
const TCollection_ExtendedString& aName,
const TCollection_ExtendedString& /*aVersion*/)
{
OSD_Path thePath=UTL::Path(aFolder);
OSD_Directory theDirectory(thePath);
if(theDirectory.Exists()) {
TCollection_ExtendedString f(aFolder);
PutSlash(f);
f+=aName;
OSD_Path p2 = UTL::Path(f);
OSD_File theFile(p2);
return theFile.Exists();
}
return Standard_False;
}
//==============================================================================
//function : HasReadPermission
//purpose :
//==============================================================================
Standard_Boolean FWOSDriver_Driver::HasReadPermission(const TCollection_ExtendedString& aFolder,
const TCollection_ExtendedString& aName,
const TCollection_ExtendedString& /*aVersion*/)
{
OSD_SingleProtection theProtection=OSD_File(UTL::Path(Concatenate(aFolder,aName))).Protection().User();
switch (theProtection) {
case OSD_None:
case OSD_R:
case OSD_RW:
case OSD_RX:
case OSD_WX:
case OSD_RWX:
case OSD_RD:
case OSD_RWD:
case OSD_RXD:
case OSD_RWXD:
return Standard_True;
default:
return Standard_False;
}
}
//==============================================================================
//function : MetaData
//purpose :
//==============================================================================
Handle(CDM_MetaData) FWOSDriver_Driver::MetaData(const TCollection_ExtendedString& aFolder,
const TCollection_ExtendedString& aName,
const TCollection_ExtendedString& /*aVersion*/)
{
TCollection_ExtendedString p = Concatenate(aFolder,aName);
return CDM_MetaData::LookUp(aFolder,aName,p,p,UTL::IsReadOnly(p));
}
//==============================================================================
//function : CreateMetaData
//purpose :
//==============================================================================
Handle(CDM_MetaData) FWOSDriver_Driver::CreateMetaData(const Handle(CDM_Document)& aDocument,
const TCollection_ExtendedString& aFileName)
{
return CDM_MetaData::LookUp(aDocument->RequestedFolder(),aDocument->RequestedName(),
Concatenate(aDocument->RequestedFolder(),aDocument->RequestedName()),
aFileName,UTL::IsReadOnly(aFileName));
}
//==============================================================================
//function : BuildFileName
//purpose :
//==============================================================================
TCollection_ExtendedString FWOSDriver_Driver::BuildFileName(const Handle(CDM_Document)& aDocument)
{
TCollection_ExtendedString retstr = TCollection_ExtendedString(aDocument->RequestedFolder());
PutSlash(retstr);
retstr += aDocument->RequestedName();
return retstr;
}
//==============================================================================
//function : FindFolder
//purpose :
//==============================================================================
Standard_Boolean FWOSDriver_Driver::FindFolder(const TCollection_ExtendedString& aFolder)
{
OSD_Path thePath=UTL::Path(aFolder);
OSD_Directory theDirectory(thePath);
return theDirectory.Exists();
}
//==============================================================================
//function : Concatenate
//purpose :
//==============================================================================
TCollection_ExtendedString FWOSDriver_Driver::Concatenate(const TCollection_ExtendedString& aFolder,
const TCollection_ExtendedString& aName)
{
TCollection_ExtendedString ff(aFolder);
ff = "";
ff += aFolder;
PutSlash(ff);
ff+=aName;
return ff;
}
//==============================================================================
//function : DefaultFolder
//purpose :
//==============================================================================
TCollection_ExtendedString FWOSDriver_Driver::DefaultFolder()
{
TCollection_ExtendedString theDefaultFolder;
if (theDefaultFolder.Length() == 0) {
#ifdef WNT
TCollection_ExtendedString hd=UTL::xgetenv("HOMEDRIVE");
if(hd.Length() != NULL) {
theDefaultFolder=hd;
theDefaultFolder+=UTL::xgetenv("HOMEPATH");
}
else {
theDefaultFolder=UTL::xgetenv("TEMP");
if(theDefaultFolder.Length()==0)
Standard_Failure::Raise("cannot determine default folder; HOMEDRIVE and TEMP are undefined");
}
#else
TCollection_ExtendedString home=UTL::xgetenv("HOME");
if(home.Length() !=0)
theDefaultFolder = home;
else
theDefaultFolder= TCollection_ExtendedString("/tmp");
#endif
}
return theDefaultFolder;
}
//==============================================================================
//function : BuildMetaData
//purpose :
//==============================================================================
Handle(CDM_MetaData) FWOSDriver_Driver::BuildMetaData(const TCollection_ExtendedString& aFileName)
{
OSD_Path p = UTL::Path(aFileName);
TCollection_ExtendedString f = UTL::Trek(p);
TCollection_ExtendedString n = UTL::Name(p);
n +=".";
n += UTL::Extension(p);
return CDM_MetaData::LookUp(f,n,aFileName,aFileName,UTL::IsReadOnly(aFileName));
}
//==============================================================================
//function : SetName
//purpose :
//==============================================================================
TCollection_ExtendedString FWOSDriver_Driver::SetName(const Handle(CDM_Document)& aDocument,
const TCollection_ExtendedString& aName)
{
TCollection_ExtendedString xn(aName), n(aName);
#ifdef WNT
//windows is not case sensitive
Standard_ExtCharacter echar;
//make the extension lower case
for(int i = 1; i <= xn.Length(); i++)
{
echar = xn.Value(i);
echar = towlower(echar);
xn.SetValue(i, echar);
}
#endif
TCollection_ExtendedString e (aDocument->FileExtension());
TCollection_ExtendedString xe(e);
if (e.Length() > 0) {
#ifdef WNT
//windows is not case sensitive
Standard_ExtCharacter echar;
//make the extension lower case
for(int i = 1; i <= xe.Length(); i++)
{
echar = xe.Value(i);
echar = towlower(echar);
xe.SetValue(i, echar);
}
#endif
xe.Insert(1, '.');
e.Insert(1, '.');
Standard_Integer ln = xn.Length();
Standard_Integer le = xe.Length();
Standard_Boolean ExtensionIsAlreadyThere = Standard_False;
if(ln>=le) {
Standard_Integer ind=xn.SearchFromEnd(xe);
ExtensionIsAlreadyThere = ind+le-1==ln;
}
if(!ExtensionIsAlreadyThere) n+=e;
}
return n;
}

View File

@@ -16,11 +16,11 @@
#include <FWOSDriver_DriverFactory.ixx>
#include <FWOSDriver_Driver.hxx>
#include <CDF_FWOSDriver.hxx>
FWOSDriver_DriverFactory::FWOSDriver_DriverFactory(){}
Handle(CDF_MetaDataDriver) FWOSDriver_DriverFactory::Build() const {
static Handle(FWOSDriver_Driver) d = new FWOSDriver_Driver();
static Handle(CDF_FWOSDriver) d = new CDF_FWOSDriver();
return d;
}