Package com.dubture.symfony.core.codeassist

Source Code of com.dubture.symfony.core.codeassist.CodeassistUtils

/*******************************************************************************
* This file is part of the Symfony eclipse plugin.
*
* (c) Robert Gruendler <r.gruendler@gmail.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
******************************************************************************/
package com.dubture.symfony.core.codeassist;

import java.util.List;

import org.eclipse.core.runtime.IPath;
import org.eclipse.dltk.core.IModelElement;
import org.eclipse.dltk.core.IScriptProject;
import org.eclipse.dltk.core.IType;
import org.eclipse.dltk.core.index2.search.ISearchEngine.MatchRule;
import org.eclipse.dltk.core.search.IDLTKSearchScope;
import org.eclipse.dltk.core.search.SearchEngine;
import org.eclipse.dltk.internal.core.ModelElement;
import org.eclipse.dltk.internal.core.SourceRange;
import org.eclipse.php.internal.core.codeassist.CodeAssistUtils;
import org.eclipse.php.internal.core.codeassist.ICompletionReporter;
import org.eclipse.php.internal.core.model.PhpModelAccess;

import com.dubture.symfony.core.model.Bundle;
import com.dubture.symfony.core.model.Controller;
import com.dubture.symfony.core.model.SymfonyModelAccess;
import com.dubture.symfony.core.model.Template;
import com.dubture.symfony.core.model.Translation;
import com.dubture.symfony.core.model.ViewPath;
import com.dubture.symfony.index.model.TransUnit;

@SuppressWarnings({ "restriction", "deprecation" })
public class CodeassistUtils {

  public static void reportTranslations(ICompletionReporter reporter, String prefix, SourceRange range, IScriptProject project) {

    SymfonyModelAccess model = SymfonyModelAccess.getDefault();
   
    List<Bundle> bundles = model.findBundles(project);
    List<TransUnit> units = model.findTranslations(project.getPath());   
   
    for (TransUnit unit : units) {

      Bundle targetBundle = null;

      for (Bundle bundle : bundles) {     
        if (unit.path.startsWith(bundle.getTranslationPath())) {
          targetBundle = bundle;
          break;
        }
      }

      if (targetBundle.getScriptProject() == null) {
        targetBundle.setProject(project);
      }

      if (targetBundle != null && CodeAssistUtils.startsWithIgnoreCase(unit.name, prefix)) {
        Translation trans = new Translation(targetBundle,unit);       
        reporter.reportType(trans, "", range)
      }
    }     

  }

 
  /**
   * Report the different parts of a ViewPath (Bundle:Controller(/Subpath):template) to the completion engine
   */
  public static void reportViewpath(ICompletionReporter reporter, ViewPath viewPath, String prefix, SourceRange range, IScriptProject project)
  {
        SymfonyModelAccess model = SymfonyModelAccess.getDefault();
        String bundle = viewPath.getBundle();
        String controller = viewPath.getController();
        String template = viewPath.getTemplate();
        IDLTKSearchScope projectScope = SearchEngine.createSearchScope(project);
     
        // complete the bundle part
        if (bundle == null && controller == null && template == null) {

            List<Bundle> bundles = model.findBundles(project);

            for (Bundle b : bundles) {             
               
                IType[] bundleTypes = PhpModelAccess.getDefault().findTypes(b.getElementName(), MatchRule.EXACT, 0, 0, projectScope, null);
               
                if (bundleTypes.length == 1) {
                   
                    ModelElement bType = (ModelElement) bundleTypes[0];
                   
                    if (CodeAssistUtils.startsWithIgnoreCase(bType.getElementName(), prefix)) {
                        Bundle bundleType = new Bundle(bType, b.getElementName());
                        reporter.reportType(bundleType, ":", range);                       
                    }
                }
            }          
        // complete the controller part: "Bundle:|
        } else if (controller == null && template == null) {           
           
            IType[] controllers = model.findBundleControllers(bundle, project);
           
            for (IPath path : model.findBundleViewPaths(bundle, project)) {
               
                IType t  = null;
                for (IType type : controllers) {
                   
                    String pathString = path.removeLastSegments(path.segmentCount()-1).toString();
                   
                    if (type.getElementName().contains(pathString)) {
                        t = type;
                        break;
                    }
                }
               
                if (t == null) {
                    continue;
                }
               
                Controller ctrl = new Controller((ModelElement)t, path.toString());
                reporter.reportType(ctrl, ":", range);
            }

           
        // complete template path: "Bundle:Controller:|
        } else if (bundle != null && controller != null) {

            IModelElement[] templates = model.findTemplates(bundle, controller, project);
           
            if (templates != null) {               
                for (IModelElement tpl : templates) {

                    if (CodeAssistUtils.startsWithIgnoreCase(tpl.getElementName(), prefix)) {
                        Template t = new Template((ModelElement) tpl, tpl.getElementName());
                        reporter.reportType(t, "", range);
                    }
                   
                }
            }
           
        // project root: "::|
        } else if (bundle == null && controller == null && template != null) {

            IModelElement[] templates = model.findRootTemplates(project);
           
            if (templates != null) {               
                for (IModelElement tpl : templates) {
                   
                    if (CodeAssistUtils.startsWithIgnoreCase(tpl.getElementName(), prefix)) {
                        Template t = new Template((ModelElement) tpl, tpl.getElementName());
                        reporter.reportType(t, "", range);
                    }
                   
                }
            }
           
        // bundle root: "AcmeDemoBundle::|
        } else if (bundle != null && controller == null && template != null) {
           
            IModelElement[] templates = model.findBundleRootTemplates(bundle, project);
           
            if (templates != null) {               
                for (IModelElement tpl : templates) {
                   
                    if (CodeAssistUtils.startsWithIgnoreCase(tpl.getElementName(), prefix)) {
                        Template t = new Template((ModelElement) tpl, tpl.getElementName());
                        reporter.reportType(t, "", range);
                    }                  
                }
            }
        }     
  }
}
TOP

Related Classes of com.dubture.symfony.core.codeassist.CodeassistUtils

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.