package com.cfsoft.ofbiz.reference.service;
import com.cfsoft.ofbiz.OfbizUtils;
import com.cfsoft.ofbiz.dom.service.api.Service;
import com.cfsoft.ofbiz.facet.OfbizFacet;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiReferenceBase;
import com.intellij.psi.xml.XmlAttribute;
import com.intellij.util.xml.DomJavaUtil;
import com.intellij.util.xml.DomUtil;
import org.jetbrains.annotations.NotNull;
import java.util.Collection;
import java.util.Set;
public class ServiceLocationReference extends PsiReferenceBase<XmlAttribute> {
public ServiceLocationReference(@NotNull final XmlAttribute xmlTag) {
super(xmlTag, false);
}
@SuppressWarnings({"unchecked"})
public PsiElement resolve() {
if (OfbizFacet.getInstance(myElement) == null) {
return myElement;
}
final Service service = (Service) DomUtil.getDomElement(myElement.getParent());
PsiElement psiEle = OfbizUtils.getServiceLocation(service);
if (psiEle == null && service.getEngine().getValue().equals("java")) {
psiEle = DomJavaUtil.findClass(service.getLocation().getStringValue().trim(), service);
}
return psiEle == null ? null : psiEle;
}
@NotNull
@SuppressWarnings({"unchecked"})
public Object[] getVariants() {
if (OfbizFacet.getInstance(myElement) == null) {
return new Object[0];
}
Service service = (Service) DomUtil.getDomElement(myElement.getParent());
Collection<Object> set = OfbizUtils.getServiceLocationNames(service);
return set.toArray();
}
}