lang-api
[idea/community.git] / platform / lang-api / src / com / intellij / patterns / VirtualFilePattern.java
1 /*
2  * Copyright (c) 2000-2007 JetBrains s.r.o. All Rights Reserved.
3  */
4
5 package com.intellij.patterns;
6
7 import com.intellij.openapi.fileTypes.FileType;
8 import com.intellij.openapi.vfs.VirtualFile;
9 import com.intellij.util.ProcessingContext;
10 import com.intellij.util.xml.NanoXmlUtil;
11 import org.jetbrains.annotations.NotNull;
12
13 import java.io.IOException;
14
15 /**
16  * @author nik
17  */
18 public class VirtualFilePattern extends TreeElementPattern<VirtualFile, VirtualFile, VirtualFilePattern> {
19   public VirtualFilePattern() {
20     super(VirtualFile.class);
21   }
22
23   public VirtualFilePattern ofType(final FileType type) {
24     return with(new PatternCondition<VirtualFile>("ofType") {
25       public boolean accepts(@NotNull final VirtualFile virtualFile, final ProcessingContext context) {
26         return type.equals(virtualFile.getFileType());
27       }
28     });
29   }
30
31   public VirtualFilePattern withName(final String name) {
32     return withName(PlatformPatterns.string().equalTo(name));
33   }
34   
35   public VirtualFilePattern withName(final ElementPattern<String> namePattern) {
36     return with(new PatternCondition<VirtualFile>("withName") {
37       public boolean accepts(@NotNull final VirtualFile virtualFile, final ProcessingContext context) {
38         return namePattern.getCondition().accepts(virtualFile.getName(), context);
39       }
40     });
41   }
42
43   public VirtualFilePattern xmlWithRootTag(final ElementPattern<String> tagNamePattern) {
44     return with(new PatternCondition<VirtualFile>("xmlWithRootTag") {
45       public boolean accepts(@NotNull final VirtualFile virtualFile, final ProcessingContext context) {
46         try {
47           String tagName = NanoXmlUtil.parseHeaderWithException(virtualFile).getRootTagLocalName();
48           return tagName != null && tagNamePattern.getCondition().accepts(tagName, context);
49         }
50         catch (IOException e) {
51           return false;
52         }
53       }
54     });
55   }
56
57   protected VirtualFile getParent(@NotNull final VirtualFile t) {
58     return t.getParent();
59   }
60
61   protected VirtualFile[] getChildren(@NotNull final VirtualFile file) {
62     return file.getChildren();
63   }
64 }