rename initial
[idea/javafx-plugin.git] / src / org / jetbrains / javafx / lang / psi / impl / JavaFxPresentableElementImpl.java
1 /*
2  * Copyright 2000-2010 JetBrains s.r.o.
3  *
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
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  */
16 package org.jetbrains.javafx.lang.psi.impl;
17
18 import com.intellij.lang.ASTNode;
19 import com.intellij.navigation.ItemPresentation;
20 import com.intellij.openapi.editor.colors.TextAttributesKey;
21 import com.intellij.psi.PsiElement;
22 import com.intellij.psi.PsiNamedElement;
23 import com.intellij.psi.stubs.IStubElementType;
24 import com.intellij.psi.stubs.StubElement;
25 import com.intellij.util.IncorrectOperationException;
26 import org.jetbrains.annotations.NonNls;
27 import org.jetbrains.annotations.NotNull;
28 import org.jetbrains.javafx.lang.psi.JavaFxPsiUtil;
29 import org.jetbrains.javafx.refactoring.JavaFxChangeUtil;
30
31 import javax.swing.*;
32
33 /**
34  * Created by IntelliJ IDEA.
35  *
36  * @author: Alexey.Ivanov
37  */
38 public abstract class JavaFxPresentableElementImpl<T extends StubElement> extends JavaFxBaseElementImpl<T> implements PsiNamedElement {
39   public JavaFxPresentableElementImpl(@NotNull T stub, @NotNull IStubElementType nodeType) {
40     super(stub, nodeType);
41   }
42
43   public JavaFxPresentableElementImpl(@NotNull ASTNode node) {
44     super(node);
45   }
46
47   @Override
48   public ItemPresentation getPresentation() {
49     return new ItemPresentation() {
50       public String getPresentableText() {
51         final String name = getName();
52         return (name != null) ? name : "<none>";
53       }
54
55       public String getLocationString() {
56         return "(" + JavaFxPresentableElementImpl.this.getLocationString() + ")";
57       }
58
59       public Icon getIcon(boolean open) {
60         return JavaFxPresentableElementImpl.this.getIcon(open ? ICON_FLAG_OPEN : ICON_FLAG_CLOSED);
61       }
62
63       public TextAttributesKey getTextAttributesKey() {
64         return null;
65       }
66     };
67   }
68
69   public PsiElement setName(@NonNls @NotNull String name) throws IncorrectOperationException {
70     final ASTNode oldNameIdentifier = getNameNode();
71     if (oldNameIdentifier != null) {
72       final ASTNode nameElement = JavaFxChangeUtil.createNameIdentifier(getProject(), name);
73       getNode().replaceChild(oldNameIdentifier, nameElement);
74     }
75     return this;
76   }
77
78   @Override
79   public int getTextOffset() {
80     final ASTNode nameNode = getNameNode();
81     if (nameNode != null) {
82       return nameNode.getStartOffset();
83     }
84     return super.getTextOffset();
85   }
86
87   protected String getLocationString() {
88     final String fileName = getContainingFile().getName();
89     final int pos = fileName.lastIndexOf('.');
90     return JavaFxPsiUtil.getPackageNameForElement(this) + "." + fileName.substring(0, pos);
91   }
92 }