merge the formfield patch from ooo-build
[ooovba.git] / cosv / source / storage / ploc.cxx
blob0b2374b6ed96f8ab94a874de8602b186109f91cd
1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: ploc.cxx,v $
10 * $Revision: 1.5 $
12 * This file is part of OpenOffice.org.
14 * OpenOffice.org is free software: you can redistribute it and/or modify
15 * it under the terms of the GNU Lesser General Public License version 3
16 * only, as published by the Free Software Foundation.
18 * OpenOffice.org is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU Lesser General Public License version 3 for more details
22 * (a copy is included in the LICENSE file that accompanied this code).
24 * You should have received a copy of the GNU Lesser General Public License
25 * version 3 along with OpenOffice.org. If not, see
26 * <http://www.openoffice.org/license.html>
27 * for a copy of the LGPLv3 License.
29 ************************************************************************/
31 #include <precomp.h>
32 #include <cosv/ploc.hxx>
34 // NOT FULLY DECLARED SERVICES
35 #include <cosv/bstream.hxx>
40 namespace csv
42 namespace ploc
46 Path::Path( const char * i_sPath,
47 bool i_bPathIsAlwaysDir,
48 const char * i_sDelimiter )
49 : pRoot(0)
50 // aPath,
51 // sFile
53 Set(i_sPath, i_bPathIsAlwaysDir, i_sDelimiter );
56 Path::Path( const Path & i_rPath )
57 : pRoot(i_rPath.pRoot->CreateCopy()),
58 aPath(i_rPath.aPath),
59 sFile(i_rPath.sFile)
63 Path::~Path()
67 Path &
68 Path::operator=( const Path & i_rPath )
70 pRoot = i_rPath.pRoot->CreateCopy();
71 aPath = i_rPath.aPath;
72 sFile = i_rPath.sFile;
73 return *this;
77 void
78 Path::Set( const char * i_sPath,
79 bool i_bPathIsAlwaysDir,
80 const char * i_sDelimiter )
82 if ( *i_sDelimiter != '\\' AND *i_sDelimiter != '/' )
83 return;
85 const char *
86 restPath = 0;
87 pRoot = Root::Create_( restPath, i_sPath, i_sDelimiter );
88 if (restPath == 0)
89 return;
91 aPath.Set(restPath, i_bPathIsAlwaysDir, i_sDelimiter);
93 if (NOT i_bPathIsAlwaysDir)
95 const char *
96 file = strrchr( restPath, *i_sDelimiter );
97 if (file == 0)
98 file = restPath;
99 else
100 file++;
101 sFile = file;
105 void
106 Path::SetFile( const String & i_sName )
108 sFile = i_sName;
111 const char *
112 Path::FileExtension() const
114 const char *
115 ext = strrchr(sFile, '.');
116 if (ext != 0)
117 ++ext;
118 else
119 ext = "";
120 return ext;
123 bool
124 Path::IsValid() const
126 return RootDir().OwnDelimiter() != 0;
129 void
130 Path::Get( ostream & o_rPath ) const
132 if (NOT IsValid())
133 return;
135 pRoot->Get( o_rPath );
136 aPath.Get( o_rPath, pRoot->OwnDelimiter() );
138 if ( sFile.length() > 0 )
139 o_rPath << sFile;
143 void
144 Path::Get( bostream & o_rPath ) const
146 if (NOT IsValid())
147 return;
149 pRoot->Get( o_rPath );
150 aPath.Get( o_rPath, pRoot->OwnDelimiter() );
152 if ( sFile.length() > 0 )
153 o_rPath.write( sFile );
159 } // namespace ploc
160 } // namespace csv