// Path: SVNToolBox/src/main/java/zielu/svntoolbox/projectView/ProjectViewStatus.java
// public class ProjectViewStatus {
//     public static final ProjectViewStatus EMPTY = new ProjectViewStatus() {
//         @Override
//         public boolean equals(Object other) {
//             return this == other;
//         }
//     };
//     public static final ProjectViewStatus PENDING = new ProjectViewStatus(SvnToolBoxBundle.getString("status.svn.pending"), true) {
//         @Override
//         public boolean equals(Object other) {
//             return this == other;
//         }
//     };
//     public static final ProjectViewStatus NOT_CONFIGURED = new ProjectViewStatus(SvnToolBoxBundle.getString("status.svn.notConfigured"), false) {
//         @Override
//         public boolean equals(Object other) {
//             return this == other;
//         }
//     };
// 
//     private final String myBranchName;
//     private final boolean myTemporary;
// 
//     public ProjectViewStatus(String branchName) {
//         this(branchName, false);
//     }
// 
//     private ProjectViewStatus(String branchName, boolean temporary) {
//         myBranchName = Preconditions.checkNotNull(branchName, "Null branch name");
//         myTemporary = temporary;
//     }
// 
//     private ProjectViewStatus() {
//         myBranchName = null;
//         myTemporary = false;
//     }
// 
//     public boolean isEmpty() {
//         return myBranchName == null;
//     }
// 
//     public boolean isTemporary() {
//         return myTemporary;
//     }
// 
//     public String getBranchName() {
//         return myBranchName;
//     }
// 
//     @Override
//     public boolean equals(Object o) {
//         if (this == o) {
//             return true;
//         }
//         if (o == null || getClass() != o.getClass()) {
//             return false;
//         }
// 
//         ProjectViewStatus that = (ProjectViewStatus) o;
// 
//         if (myBranchName != null ? !myBranchName.equals(that.myBranchName) : that.myBranchName != null) {
//             return false;
//         }
// 
//         return true;
//     }
// 
//     @Override
//     public int hashCode() {
//         return myBranchName != null ? myBranchName.hashCode() : 0;
//     }
// 
//     @Override
//     public String toString() {
//         return MoreObjects.toStringHelper(this)
//                 .add("branchName", myBranchName)
//                 .add("temporary", myTemporary)
//                 .toString();
//     }
// }


import com.intellij.ide.projectView.PresentationData;
import com.intellij.ide.projectView.ProjectViewNode;
import com.intellij.ide.projectView.impl.nodes.ClassTreeNode;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.util.PsiUtilBase;
import zielu.svntoolbox.projectView.ProjectViewStatus;
/*
 * $Id$
 */
package zielu.svntoolbox.ui.projectView.impl;


/**
 * <p></p>
 * <br/>
 * <p>Created on 12.10.13</p>
 *
 * @author Lukasz Zielinski
 */
public class ClassFileDecoration extends AbstractNodeDecoration {

    @Override
    protected VirtualFile getVirtualFile(ProjectViewNode node) {
        ClassTreeNode classNode = (ClassTreeNode) node;
        return PsiUtilBase.getVirtualFile(classNode.getPsiClass());
    }

    @Override
    protected void applyDecorationUnderSvn(ProjectViewNode node, PresentationData data) {
        ProjectViewStatus status = getBranchStatusAndCache(node);
        if (shouldApplyDecoration(status)) {
            data.addText(formatBranchName(status));
        }
    }

    @Override
    public boolean isForMe(ProjectViewNode node) {
        if (node instanceof ClassTreeNode) {
            ClassTreeNode classNode = (ClassTreeNode) node;
// Path: SVNToolBox/src/main/java/zielu/svntoolbox/projectView/ProjectViewStatus.java
// public class ProjectViewStatus {
//     public static final ProjectViewStatus EMPTY = new ProjectViewStatus() {
//         @Override
//         public boolean equals(Object other) {
//             return this == other;
//         }
//     };
//     public static final ProjectViewStatus PENDING = new ProjectViewStatus(SvnToolBoxBundle.getString("status.svn.pending"), true) {
//         @Override
//         public boolean equals(Object other) {
//             return this == other;
//         }
//     };
//     public static final ProjectViewStatus NOT_CONFIGURED = new ProjectViewStatus(SvnToolBoxBundle.getString("status.svn.notConfigured"), false) {
//         @Override
//         public boolean equals(Object other) {
//             return this == other;
//         }
//     };
// 
//     private final String myBranchName;
//     private final boolean myTemporary;
// 
//     public ProjectViewStatus(String branchName) {
//         this(branchName, false);
//     }
// 
//     private ProjectViewStatus(String branchName, boolean temporary) {
//         myBranchName = Preconditions.checkNotNull(branchName, "Null branch name");
//         myTemporary = temporary;
//     }
// 
//     private ProjectViewStatus() {
//         myBranchName = null;
//         myTemporary = false;
//     }
// 
//     public boolean isEmpty() {
//         return myBranchName == null;
//     }
// 
//     public boolean isTemporary() {
//         return myTemporary;
//     }
// 
//     public String getBranchName() {
//         return myBranchName;
//     }
// 
//     @Override
//     public boolean equals(Object o) {
//         if (this == o) {
//             return true;
//         }
//         if (o == null || getClass() != o.getClass()) {
//             return false;
//         }
// 
//         ProjectViewStatus that = (ProjectViewStatus) o;
// 
//         if (myBranchName != null ? !myBranchName.equals(that.myBranchName) : that.myBranchName != null) {
//             return false;
//         }
// 
//         return true;
//     }
// 
//     @Override
//     public int hashCode() {
//         return myBranchName != null ? myBranchName.hashCode() : 0;
//     }
// 
//     @Override
//     public String toString() {
//         return MoreObjects.toStringHelper(this)
//                 .add("branchName", myBranchName)
//                 .add("temporary", myTemporary)
//                 .toString();
//     }
// }


// Path: SVNToolBox/src/main/java/zielu/svntoolbox/ui/projectView/impl/ClassFileDecoration.java
import com.intellij.ide.projectView.PresentationData;
import com.intellij.ide.projectView.ProjectViewNode;
import com.intellij.ide.projectView.impl.nodes.ClassTreeNode;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.util.PsiUtilBase;
import zielu.svntoolbox.projectView.ProjectViewStatus;

/*
 * $Id$
 */
package zielu.svntoolbox.ui.projectView.impl;


/**
 * <p></p>
 * <br/>
 * <p>Created on 12.10.13</p>
 *
 * @author Lukasz Zielinski
 */
public class ClassFileDecoration extends AbstractNodeDecoration {

    @Override
    protected VirtualFile getVirtualFile(ProjectViewNode node) {
        ClassTreeNode classNode = (ClassTreeNode) node;
        return PsiUtilBase.getVirtualFile(classNode.getPsiClass());
    }

    @Override
    protected void applyDecorationUnderSvn(ProjectViewNode node, PresentationData data) {
        ProjectViewStatus status = getBranchStatusAndCache(node);
        if (shouldApplyDecoration(status)) {
            data.addText(formatBranchName(status));
        }
    }

    @Override
    public boolean isForMe(ProjectViewNode node) {
        if (node instanceof ClassTreeNode) {
            ClassTreeNode classNode = (ClassTreeNode) node;
            return classNode.isTopLevel();