package com.cfsoft.ofbiz.reference.controller; import com.cfsoft.ofbiz.dom.controller.api.*; import com.cfsoft.ofbiz.dom.controller.model.ControllerManager; 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.psi.xml.XmlFile; import com.intellij.util.xml.DomUtil; import org.jetbrains.annotations.NotNull; import java.util.HashSet; import java.util.Set; public class ResponseValueReference extends PsiReferenceBase<XmlAttribute> { public ResponseValueReference(@NotNull final XmlAttribute xmlTag) { super(xmlTag, false); } @SuppressWarnings({"unchecked"}) public PsiElement resolve() { if (OfbizFacet.getInstance(myElement) == null) { return myElement; } Response response = (Response) DomUtil.getDomElement(myElement.getParent()); Controller controller = ControllerManager.getInstance(myElement.getProject()).getController((XmlFile) myElement.getContainingFile()); //String localName = myElement.getLocalName(); //if(localName.equals("value")){ if (response.getType().getStringValue().equals("request")) { for (RequestMap requestMap : controller.getAllRequestMaps()) { if (requestMap.getUri().getStringValue().equals(response.getViewName().getStringValue())) { return requestMap.getXmlElement(); } } } else { for (ViewMap viewMap : controller.getAllViewMaps()) { if (viewMap.getName().getStringValue().equals(response.getViewName().getStringValue())) { return viewMap.getXmlElement(); } } return myElement; } //} return myElement; } @NotNull @SuppressWarnings({"unchecked"}) public Object[] getVariants() { Response response = (Response) DomUtil.getDomElement(myElement.getParent()); Controller controller = ControllerManager.getInstance(myElement.getProject()).getController((XmlFile) myElement.getContainingFile()); Set<String> set = new HashSet<String>(); if (response.getType().getStringValue().equals("request")) { for (RequestMap requestMap : controller.getAllRequestMaps()) { set.add(requestMap.getUri().getValue()); } } else { for (ViewMap viewMap : controller.getAllViewMaps()) { set.add(viewMap.getName().getStringValue()); } } return set.toArray(); } }