package com.cfsoft.ofbiz.reference.controller; import com.cfsoft.ofbiz.OfbizUtils; import com.cfsoft.ofbiz.dom.controller.api.*; import com.cfsoft.ofbiz.dom.service.api.Service; import com.cfsoft.ofbiz.dom.service.api.Services; import com.cfsoft.ofbiz.dom.service.model.ServiceManager; import com.cfsoft.ofbiz.dom.service.model.ServiceModel; import com.cfsoft.ofbiz.facet.OfbizFacet; import com.intellij.openapi.module.Module; import com.intellij.openapi.module.ModuleUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.*; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.psi.xml.XmlAttribute; import com.intellij.util.xml.*; import org.jetbrains.annotations.NotNull; import java.util.HashSet; import java.util.List; import java.util.Set; public class EventInvokeReference extends PsiReferenceBase<XmlAttribute> { public EventInvokeReference(@NotNull final XmlAttribute xmlTag) { super(xmlTag, false); } @SuppressWarnings({"unchecked"}) public PsiElement resolve() { if (OfbizFacet.getInstance(myElement) == null) { return myElement; } final Event event = (Event) DomUtil.getDomElement(myElement.getParent()); PsiElement psiEle = OfbizUtils.getEventMethod(event); String attrName = myElement.getLocalName(); if (psiEle == null) { if (attrName.equals("invoke")) { psiEle = OfbizUtils.getEventServiceElememnt(event); } else if(attrName.equals("type")){ psiEle = OfbizUtils.getEventTypeElement(event); } } return psiEle == null ? myElement : psiEle; } @NotNull @SuppressWarnings({"unchecked"}) public Object[] getVariants() { if (OfbizFacet.getInstance(myElement) == null) { return new Object[0]; } Event event = (Event) DomUtil.getDomElement(myElement.getParent()); Set<String> set = new HashSet<String>(); String attrName = myElement.getLocalName(); if(attrName.equals("invoke")){ set= OfbizUtils.getEventCompleteMethodNames(event); }else if (attrName.equals("type")) { set= OfbizUtils.getEventCompleteTypes(event, "request"); } return set.size() == 0 ? OfbizUtils.getEventCompleteServiceNames(event).toArray() : set.toArray(); } }