package org.jboss.tools.jsf.model.pv; import java.util.ArrayList; import java.util.StringTokenizer; import org.jboss.tools.common.model.XModel; import org.jboss.tools.common.model.XModelObject; import org.jboss.tools.jst.web.model.pv.WebProjectNode; public class JSFBeanSearcher { WebProjectNode beans; WebProjectNode conf; XModelObject bean; JSFProjectBean beanClass; String property; public JSFBeanSearcher(XModel model) { WebProjectNode root = JSFProjectsTree.getProjectsRoot(model); if(root == null) return; beans = (WebProjectNode)root.getChildByPath(JSFProjectTreeConstants.BEANS); conf = (WebProjectNode)root.getChildByPath(JSFProjectTreeConstants.CONFIGURATION); } public void parse(String path) { String[] a = toArray(path); if(a.length == 0) return; bean = JSFPromptingProvider.findBean(conf, a[0]); beanClass = (JSFProjectBean)JSFPromptingProvider.findBeanClass(beans, bean); if(bean == null || a.length < 2) return; property = a[1]; for (int i = 1; i < a.length - 1; i++) { if(!next()) return; property = a[i + 1]; } } String[] toArray(String path) { ArrayList<String> l = new ArrayList<String>(); StringTokenizer st = new StringTokenizer(path, "."); while(st.hasMoreElements()) l.add(st.nextToken()); return l.toArray(new String[0]); } private boolean next() { if(bean == null || beanClass == null || property == null) return false; XModelObject p = beanClass.getChildByPath(property); if(p == null) return false; String cls = p.getAttributeValue("class name"); XModelObject b = JSFPromptingProvider.findBeanClassByClassName(beans, cls); if(!(b instanceof JSFProjectBean)) { b = JSFPromptingProvider.buildBean(p.getModel(), cls); if(!(b instanceof JSFProjectBean)) return false; } beanClass = (JSFProjectBean)b; XModelObject[] beanList = beanClass.getBeanList(); if(beanList.length > 0) { bean = beanList[0]; } //bean = beanList.length == 0 ? null : beanList[0]; return true; } public XModelObject getBean() { return bean; } public XModelObject getBeanClass() { return beanClass; } public String getProperty() { return property; } }