2 * Copyright 2000-2009 JetBrains s.r.o.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 package com
.intellij
.patterns
;
19 import com
.intellij
.openapi
.fileTypes
.FileType
;
20 import com
.intellij
.openapi
.vfs
.VirtualFile
;
21 import com
.intellij
.util
.ProcessingContext
;
22 import com
.intellij
.util
.xml
.NanoXmlUtil
;
23 import org
.jetbrains
.annotations
.NotNull
;
25 import java
.io
.IOException
;
30 public class VirtualFilePattern
extends TreeElementPattern
<VirtualFile
, VirtualFile
, VirtualFilePattern
> {
31 public VirtualFilePattern() {
32 super(VirtualFile
.class);
35 public VirtualFilePattern
ofType(final FileType type
) {
36 return with(new PatternCondition
<VirtualFile
>("ofType") {
37 public boolean accepts(@NotNull final VirtualFile virtualFile
, final ProcessingContext context
) {
38 return type
.equals(virtualFile
.getFileType());
43 public VirtualFilePattern
withName(final String name
) {
44 return withName(PlatformPatterns
.string().equalTo(name
));
47 public VirtualFilePattern
withName(final ElementPattern
<String
> namePattern
) {
48 return with(new PatternCondition
<VirtualFile
>("withName") {
49 public boolean accepts(@NotNull final VirtualFile virtualFile
, final ProcessingContext context
) {
50 return namePattern
.getCondition().accepts(virtualFile
.getName(), context
);
55 public VirtualFilePattern
xmlWithRootTag(final ElementPattern
<String
> tagNamePattern
) {
56 return with(new PatternCondition
<VirtualFile
>("xmlWithRootTag") {
57 public boolean accepts(@NotNull final VirtualFile virtualFile
, final ProcessingContext context
) {
59 String tagName
= NanoXmlUtil
.parseHeaderWithException(virtualFile
).getRootTagLocalName();
60 return tagName
!= null && tagNamePattern
.getCondition().accepts(tagName
, context
);
62 catch (IOException e
) {
68 public VirtualFilePattern
xmlWithRootTagNamespace(final String
... namespace
) {
69 StringPattern namespacePattern
= StandardPatterns
.string().oneOf(namespace
);
70 return xmlWithRootTagNamespace(namespacePattern
);
73 public VirtualFilePattern
xmlWithRootTagNamespace(final ElementPattern
<String
> namespacePattern
) {
74 return with(new PatternCondition
<VirtualFile
>("xmlWithRootTagNamespace") {
75 public boolean accepts(@NotNull final VirtualFile virtualFile
, final ProcessingContext context
) {
77 String rootTagNamespace
= NanoXmlUtil
.parseHeaderWithException(virtualFile
).getRootTagNamespace();
78 return rootTagNamespace
!= null && namespacePattern
.getCondition().accepts(rootTagNamespace
, context
);
80 catch (IOException e
) {
87 protected VirtualFile
getParent(@NotNull final VirtualFile t
) {
91 protected VirtualFile
[] getChildren(@NotNull final VirtualFile file
) {
92 return file
.getChildren();