1*8a106958SDamjan Jovanovic /**************************************************************
2*8a106958SDamjan Jovanovic *
3*8a106958SDamjan Jovanovic * Licensed to the Apache Software Foundation (ASF) under one
4*8a106958SDamjan Jovanovic * or more contributor license agreements. See the NOTICE file
5*8a106958SDamjan Jovanovic * distributed with this work for additional information
6*8a106958SDamjan Jovanovic * regarding copyright ownership. The ASF licenses this file
7*8a106958SDamjan Jovanovic * to you under the Apache License, Version 2.0 (the
8*8a106958SDamjan Jovanovic * "License"); you may not use this file except in compliance
9*8a106958SDamjan Jovanovic * with the License. You may obtain a copy of the License at
10*8a106958SDamjan Jovanovic *
11*8a106958SDamjan Jovanovic * http://www.apache.org/licenses/LICENSE-2.0
12*8a106958SDamjan Jovanovic *
13*8a106958SDamjan Jovanovic * Unless required by applicable law or agreed to in writing,
14*8a106958SDamjan Jovanovic * software distributed under the License is distributed on an
15*8a106958SDamjan Jovanovic * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*8a106958SDamjan Jovanovic * KIND, either express or implied. See the License for the
17*8a106958SDamjan Jovanovic * specific language governing permissions and limitations
18*8a106958SDamjan Jovanovic * under the License.
19*8a106958SDamjan Jovanovic *
20*8a106958SDamjan Jovanovic *************************************************************/
21*8a106958SDamjan Jovanovic
22*8a106958SDamjan Jovanovic
23*8a106958SDamjan Jovanovic
24*8a106958SDamjan Jovanovic #include <precomp.h>
25*8a106958SDamjan Jovanovic #include <cosv/ploc.hxx>
26*8a106958SDamjan Jovanovic
27*8a106958SDamjan Jovanovic // NOT FULLY DECLARED SERVICES
28*8a106958SDamjan Jovanovic #include <cosv/bstream.hxx>
29*8a106958SDamjan Jovanovic
30*8a106958SDamjan Jovanovic
31*8a106958SDamjan Jovanovic
32*8a106958SDamjan Jovanovic
33*8a106958SDamjan Jovanovic namespace csv
34*8a106958SDamjan Jovanovic {
35*8a106958SDamjan Jovanovic namespace ploc
36*8a106958SDamjan Jovanovic {
37*8a106958SDamjan Jovanovic
38*8a106958SDamjan Jovanovic
Path(const char * i_sPath,bool i_bPathIsAlwaysDir,const char * i_sDelimiter)39*8a106958SDamjan Jovanovic Path::Path( const char * i_sPath,
40*8a106958SDamjan Jovanovic bool i_bPathIsAlwaysDir,
41*8a106958SDamjan Jovanovic const char * i_sDelimiter )
42*8a106958SDamjan Jovanovic : pRoot(0)
43*8a106958SDamjan Jovanovic // aPath,
44*8a106958SDamjan Jovanovic // sFile
45*8a106958SDamjan Jovanovic {
46*8a106958SDamjan Jovanovic Set(i_sPath, i_bPathIsAlwaysDir, i_sDelimiter );
47*8a106958SDamjan Jovanovic }
48*8a106958SDamjan Jovanovic
Path(const Path & i_rPath)49*8a106958SDamjan Jovanovic Path::Path( const Path & i_rPath )
50*8a106958SDamjan Jovanovic : pRoot(i_rPath.pRoot->CreateCopy()),
51*8a106958SDamjan Jovanovic aPath(i_rPath.aPath),
52*8a106958SDamjan Jovanovic sFile(i_rPath.sFile)
53*8a106958SDamjan Jovanovic {
54*8a106958SDamjan Jovanovic }
55*8a106958SDamjan Jovanovic
~Path()56*8a106958SDamjan Jovanovic Path::~Path()
57*8a106958SDamjan Jovanovic {
58*8a106958SDamjan Jovanovic }
59*8a106958SDamjan Jovanovic
60*8a106958SDamjan Jovanovic Path &
operator =(const Path & i_rPath)61*8a106958SDamjan Jovanovic Path::operator=( const Path & i_rPath )
62*8a106958SDamjan Jovanovic {
63*8a106958SDamjan Jovanovic pRoot = i_rPath.pRoot->CreateCopy();
64*8a106958SDamjan Jovanovic aPath = i_rPath.aPath;
65*8a106958SDamjan Jovanovic sFile = i_rPath.sFile;
66*8a106958SDamjan Jovanovic return *this;
67*8a106958SDamjan Jovanovic }
68*8a106958SDamjan Jovanovic
69*8a106958SDamjan Jovanovic
70*8a106958SDamjan Jovanovic void
Set(const char * i_sPath,bool i_bPathIsAlwaysDir,const char * i_sDelimiter)71*8a106958SDamjan Jovanovic Path::Set( const char * i_sPath,
72*8a106958SDamjan Jovanovic bool i_bPathIsAlwaysDir,
73*8a106958SDamjan Jovanovic const char * i_sDelimiter )
74*8a106958SDamjan Jovanovic {
75*8a106958SDamjan Jovanovic if ( *i_sDelimiter != '\\' AND *i_sDelimiter != '/' )
76*8a106958SDamjan Jovanovic return;
77*8a106958SDamjan Jovanovic
78*8a106958SDamjan Jovanovic const char *
79*8a106958SDamjan Jovanovic restPath = 0;
80*8a106958SDamjan Jovanovic pRoot = Root::Create_( restPath, i_sPath, i_sDelimiter );
81*8a106958SDamjan Jovanovic if (restPath == 0)
82*8a106958SDamjan Jovanovic return;
83*8a106958SDamjan Jovanovic
84*8a106958SDamjan Jovanovic aPath.Set(restPath, i_bPathIsAlwaysDir, i_sDelimiter);
85*8a106958SDamjan Jovanovic
86*8a106958SDamjan Jovanovic if (NOT i_bPathIsAlwaysDir)
87*8a106958SDamjan Jovanovic {
88*8a106958SDamjan Jovanovic const char *
89*8a106958SDamjan Jovanovic file = strrchr( restPath, *i_sDelimiter );
90*8a106958SDamjan Jovanovic if (file == 0)
91*8a106958SDamjan Jovanovic file = restPath;
92*8a106958SDamjan Jovanovic else
93*8a106958SDamjan Jovanovic file++;
94*8a106958SDamjan Jovanovic sFile = file;
95*8a106958SDamjan Jovanovic }
96*8a106958SDamjan Jovanovic }
97*8a106958SDamjan Jovanovic
98*8a106958SDamjan Jovanovic void
SetFile(const String & i_sName)99*8a106958SDamjan Jovanovic Path::SetFile( const String & i_sName )
100*8a106958SDamjan Jovanovic {
101*8a106958SDamjan Jovanovic sFile = i_sName;
102*8a106958SDamjan Jovanovic }
103*8a106958SDamjan Jovanovic
104*8a106958SDamjan Jovanovic const char *
FileExtension() const105*8a106958SDamjan Jovanovic Path::FileExtension() const
106*8a106958SDamjan Jovanovic {
107*8a106958SDamjan Jovanovic const char *
108*8a106958SDamjan Jovanovic ext = strrchr(sFile, '.');
109*8a106958SDamjan Jovanovic if (ext != 0)
110*8a106958SDamjan Jovanovic ++ext;
111*8a106958SDamjan Jovanovic else
112*8a106958SDamjan Jovanovic ext = "";
113*8a106958SDamjan Jovanovic return ext;
114*8a106958SDamjan Jovanovic }
115*8a106958SDamjan Jovanovic
116*8a106958SDamjan Jovanovic bool
IsValid() const117*8a106958SDamjan Jovanovic Path::IsValid() const
118*8a106958SDamjan Jovanovic {
119*8a106958SDamjan Jovanovic return RootDir().OwnDelimiter() != 0;
120*8a106958SDamjan Jovanovic }
121*8a106958SDamjan Jovanovic
122*8a106958SDamjan Jovanovic void
Get(ostream & o_rPath) const123*8a106958SDamjan Jovanovic Path::Get( ostream & o_rPath ) const
124*8a106958SDamjan Jovanovic {
125*8a106958SDamjan Jovanovic if (NOT IsValid())
126*8a106958SDamjan Jovanovic return;
127*8a106958SDamjan Jovanovic
128*8a106958SDamjan Jovanovic pRoot->Get( o_rPath );
129*8a106958SDamjan Jovanovic aPath.Get( o_rPath, pRoot->OwnDelimiter() );
130*8a106958SDamjan Jovanovic
131*8a106958SDamjan Jovanovic if ( sFile.length() > 0 )
132*8a106958SDamjan Jovanovic o_rPath << sFile;
133*8a106958SDamjan Jovanovic
134*8a106958SDamjan Jovanovic }
135*8a106958SDamjan Jovanovic
136*8a106958SDamjan Jovanovic void
Get(bostream & o_rPath) const137*8a106958SDamjan Jovanovic Path::Get( bostream & o_rPath ) const
138*8a106958SDamjan Jovanovic {
139*8a106958SDamjan Jovanovic if (NOT IsValid())
140*8a106958SDamjan Jovanovic return;
141*8a106958SDamjan Jovanovic
142*8a106958SDamjan Jovanovic pRoot->Get( o_rPath );
143*8a106958SDamjan Jovanovic aPath.Get( o_rPath, pRoot->OwnDelimiter() );
144*8a106958SDamjan Jovanovic
145*8a106958SDamjan Jovanovic if ( sFile.length() > 0 )
146*8a106958SDamjan Jovanovic o_rPath.write( sFile );
147*8a106958SDamjan Jovanovic }
148*8a106958SDamjan Jovanovic
149*8a106958SDamjan Jovanovic
150*8a106958SDamjan Jovanovic
151*8a106958SDamjan Jovanovic
152*8a106958SDamjan Jovanovic } // namespace ploc
153*8a106958SDamjan Jovanovic } // namespace csv
154