patterns in openapi
[fedora-idea.git] / lang-api / src / com / intellij / patterns / VirtualFilePattern.java
blob44d69b6f017501d3904333db4ab2607fe1945d90
1 /*
2 * Copyright (c) 2000-2007 JetBrains s.r.o. All Rights Reserved.
3 */
5 package com.intellij.patterns;
7 import com.intellij.openapi.vfs.VirtualFile;
8 import com.intellij.openapi.fileTypes.FileType;
9 import com.intellij.util.xml.NanoXmlUtil;
10 import org.jetbrains.annotations.NotNull;
12 import java.io.IOException;
14 /**
15 * @author nik
17 public class VirtualFilePattern extends TreeElementPattern<VirtualFile, VirtualFile, VirtualFilePattern> {
18 public VirtualFilePattern() {
19 super(VirtualFile.class);
22 public VirtualFilePattern ofType(final FileType type) {
23 return with(new PatternCondition<VirtualFile>() {
24 public boolean accepts(@NotNull final VirtualFile virtualFile, final MatchingContext matchingContext, @NotNull final TraverseContext traverseContext) {
25 return type.equals(virtualFile.getFileType());
27 });
30 public VirtualFilePattern withName(final ElementPattern namePattern) {
31 return with(new PatternCondition<VirtualFile>() {
32 public boolean accepts(@NotNull final VirtualFile virtualFile,
33 final MatchingContext matchingContext, @NotNull final TraverseContext traverseContext) {
34 return namePattern.accepts(virtualFile.getName(), matchingContext, traverseContext);
36 });
39 public VirtualFilePattern xmlWithRootTag(final ElementPattern tagNamePattern) {
40 return with(new PatternCondition<VirtualFile>() {
41 public boolean accepts(@NotNull final VirtualFile virtualFile, final MatchingContext matchingContext, @NotNull final TraverseContext traverseContext) {
42 try {
43 NanoXmlUtil.RootTagNameBuilder rootTagNameBuilder = new NanoXmlUtil.RootTagNameBuilder();
44 NanoXmlUtil.parse(virtualFile.getInputStream(), rootTagNameBuilder);
45 String tagName = rootTagNameBuilder.getResult();
46 return tagName != null && tagNamePattern.accepts(tagName, matchingContext, traverseContext);
48 catch (IOException e) {
49 return false;
52 });
55 protected VirtualFile getParent(@NotNull final VirtualFile t) {
56 return t.getParent();
59 protected VirtualFile[] getChildren(@NotNull final VirtualFile file) {
60 return file.getChildren();