| package org.jetbrains.android.resourceManagers; |
| |
| import com.android.ide.common.resources.ResourceItem; |
| import com.android.resources.ResourceType; |
| import com.android.tools.idea.res.LocalResourceRepository; |
| import com.intellij.openapi.project.Project; |
| import com.intellij.openapi.vfs.VirtualFile; |
| import com.intellij.psi.PsiFile; |
| import com.intellij.psi.PsiManager; |
| import com.intellij.psi.xml.XmlAttributeValue; |
| import com.intellij.psi.xml.XmlFile; |
| import com.intellij.psi.xml.XmlTag; |
| import com.intellij.util.xml.DomElement; |
| import com.intellij.util.xml.DomManager; |
| import org.jetbrains.android.dom.resources.Item; |
| import org.jetbrains.android.dom.resources.ResourceElement; |
| import org.jetbrains.android.util.AndroidResourceUtil; |
| import org.jetbrains.annotations.NotNull; |
| import org.jetbrains.annotations.Nullable; |
| |
| /** |
| * @author Eugene.Kudelevsky |
| */ |
| public final class ValueResourceInfoImpl implements ValueResourceInfo { |
| private final ResourceItem myResource; |
| private final VirtualFile myFile; |
| private final Project myProject; |
| |
| public ValueResourceInfoImpl(@NotNull ResourceItem resourceItem, @NotNull VirtualFile file, @NotNull Project project) { |
| this.myResource = resourceItem; |
| this.myFile = file; |
| myProject = project; |
| } |
| |
| @Override |
| @NotNull |
| public ResourceItem getResource() { |
| return myResource; |
| } |
| |
| @Override |
| @NotNull |
| public VirtualFile getContainingFile() { |
| return myFile; |
| } |
| |
| @Override |
| @Nullable |
| public XmlAttributeValue computeXmlElement() { |
| ResourceElement resDomElement = computeDomElement(); |
| return resDomElement != null ? resDomElement.getName().getXmlAttributeValue() : null; |
| } |
| |
| @Nullable |
| public ResourceElement computeDomElement() { |
| PsiFile file = PsiManager.getInstance(myProject).findFile(myFile); |
| if (!(file instanceof XmlFile)) { |
| return null; |
| } |
| |
| XmlTag tag = LocalResourceRepository.getItemTag(myProject, myResource); |
| if (tag == null) { |
| return null; |
| } |
| |
| DomElement domElement = DomManager.getDomManager(myProject).getDomElement(tag); |
| if (!(domElement instanceof ResourceElement)) { |
| return null; |
| } |
| |
| String resType = domElement instanceof Item |
| ? ((Item)domElement).getType().getStringValue() |
| : ResourceType.fromXmlTagName(tag.getName()).getName(); |
| if (!getType().getName().equals(resType)) { |
| return null; |
| } |
| |
| ResourceElement resDomElement = (ResourceElement)domElement; |
| String resName = ((ResourceElement)domElement).getName().getStringValue(); |
| return getName().equals(resName) ? resDomElement : null; |
| } |
| |
| @Override |
| public int compareTo(@NotNull ValueResourceInfo other) { |
| int delta = AndroidResourceUtil.compareResourceFiles(myFile, other.getContainingFile()); |
| if (delta != 0) { |
| return delta; |
| } |
| |
| delta = getType().compareTo(other.getType()); |
| if (delta != 0) { |
| return delta; |
| } |
| |
| return getName().compareTo(other.getName()); |
| } |
| |
| @Override |
| public String toString() { |
| return "ANDROID_RESOURCE: " + getType() + ", " + getName() + ", " + myFile.getPath(); |
| } |
| } |