add new ant paths matcher
[teamcity/dotNetPackagesSupport.git] / nuget-agent / src / jetbrains / buildServer / nuget / agent / runner / publish / fsScanner / RealDirectoryEntry.java
1 /*\r
2  * Copyright 2000-2011 JetBrains s.r.o.\r
3  *\r
4  * Licensed under the Apache License, Version 2.0 (the "License");\r
5  * you may not use this file except in compliance with the License.\r
6  * You may obtain a copy of the License at\r
7  *\r
8  * http://www.apache.org/licenses/LICENSE-2.0\r
9  *\r
10  * Unless required by applicable law or agreed to in writing, software\r
11  * distributed under the License is distributed on an "AS IS" BASIS,\r
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
13  * See the License for the specific language governing permissions and\r
14  * limitations under the License.\r
15  */\r
16 package jetbrains.buildServer.nuget.agent.runner.publish.fsScanner;\r
17 \r
18 \r
19 import com.intellij.openapi.util.SystemInfo;\r
20 import jetbrains.buildServer.util.StringUtil;\r
21 import org.jetbrains.annotations.NotNull;\r
22 \r
23 import java.io.File;\r
24 import java.io.FileFilter;\r
25 import java.util.ArrayList;\r
26 import java.util.List;\r
27 \r
28 public class RealDirectoryEntry implements IDirectoryEntry {\r
29   private final FileSystemPath myPath;\r
30 \r
31   public RealDirectoryEntry(FileSystemPath path) {\r
32     myPath = path;\r
33   }\r
34 \r
35   @NotNull\r
36   public String Name() {\r
37     {\r
38       String name = myPath.Name();\r
39       if (SystemInfo.isWindows) {\r
40         if (name.length() == 3 && name.charAt(1) == ':')\r
41           return name.charAt(0) + ":";\r
42       }\r
43 \r
44       return name;\r
45     }\r
46   }\r
47 \r
48   public IDirectoryEntry Parent() {\r
49     if (StringUtil.isEmptyOrSpaces(myPath.FilePath().getPath()))\r
50       return RealFileSystem.ROOT;\r
51 \r
52     String parent = myPath.FilePath().getParent();\r
53     if (parent == null)\r
54       return RealFileSystem.ROOT;\r
55 \r
56     FileSystemPath parentPath = new FileSystemPath(parent);\r
57     if (StringUtil.isEmptyOrSpaces(parentPath.FilePath().getPath()))\r
58       return RealFileSystem.ROOT;\r
59 \r
60     return new RealDirectoryEntry(parentPath);\r
61   }\r
62 \r
63   @NotNull\r
64   public IDirectoryEntry[] Subdirectories() {\r
65     try {\r
66       List<IDirectoryEntry> list = new ArrayList<IDirectoryEntry>();\r
67       for (File dir : FilePath().listFiles(new FileFilter() {\r
68         public boolean accept(File pathname) {\r
69           return pathname.isDirectory();\r
70         }\r
71       })) {\r
72         list.add(new RealDirectoryEntry(new FileSystemPath(dir)));\r
73       }\r
74       return list.toArray(new IDirectoryEntry[list.size()]);\r
75     } catch (Exception e) {\r
76       return new IDirectoryEntry[0];\r
77     }\r
78   }\r
79 \r
80   private File FilePath() {\r
81     String filePath = myPath.FilePath().getPath();\r
82 \r
83     if (SystemInfo.isWindows && filePath.endsWith(":")) {\r
84       return new File(filePath + "\\");\r
85     }\r
86     if (!SystemInfo.isWindows && filePath.equals("")) {\r
87       return new File("/");\r
88     }\r
89 \r
90     return new File(filePath);\r
91   }\r
92 \r
93   @NotNull\r
94   public IFileEntry[] Files() {\r
95 \r
96     try {\r
97       List<IFileEntry> list = new ArrayList<IFileEntry>();\r
98       for (File dir : FilePath().listFiles(new FileFilter() {\r
99         public boolean accept(File pathname) {\r
100           return pathname.isFile();\r
101         }\r
102       })) {\r
103         list.add(new RealFileEntry(new FileSystemPath(dir)));\r
104       }\r
105       return list.toArray(new IFileEntry[list.size()]);\r
106     } catch (Exception e) {\r
107       return new IFileEntry[0];\r
108     }\r
109   }\r
110 \r
111   @Override\r
112   public String toString() {\r
113     return "{d:" + myPath.FilePath() + "|" + Name() + "}";\r
114   }\r
115 }\r