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