/** Returns a list of all the executable Gant scripts available to this application. */
  public List<File> getAvailableScripts() {
    List<File> scripts = new ArrayList<File>();
    if (settings.getGrailsHome() != null) {
      addCommandScripts(new File(settings.getGrailsHome(), "scripts"), scripts);
      addCommandScripts(
          new File(settings.getGrailsHome(), "grails-scripts/src/main/scripts"), scripts);
    }
    addCommandScripts(new File(settings.getBaseDir(), "scripts"), scripts);
    addCommandScripts(new File(settings.getUserHome(), ".grails/scripts"), scripts);

    for (File dir : pluginPathSupport.listKnownPluginDirs()) {
      addPluginScripts(dir, scripts);
    }

    PathMatchingResourcePatternResolver resolver =
        new PathMatchingResourcePatternResolver(settings.getRootLoader());
    try {
      final Resource[] resources = resolver.getResources("classpath*:META-INF/scripts/*.groovy");
      for (Resource resource : resources) {
        scripts.add(resource.getFile());
      }
    } catch (IOException e) {
      // ignore
    }
    return scripts;
  }
 /** Reads a plugin.xml descriptor for the given plugin name */
 public GPathResult readPluginXmlMetadata(String pluginName) throws Exception {
   Resource pluginResource = pluginSettings.getPluginDirForName(pluginName);
   if (pluginResource != null) {
     File pluginDir = pluginResource.getFile();
     return new XmlSlurper().parse(new File(pluginDir, "plugin.xml"));
   }
   return null;
 }
 /** Reads all installed plugin descriptors returning a list */
 public List<GPathResult> readAllPluginXmlMetadata() throws Exception {
   Resource[] allFiles = pluginSettings.getPluginXmlMetadata();
   List<GPathResult> results = new ArrayList<GPathResult>();
   for (Resource resource : allFiles) {
     if (resource.exists()) {
       results.add(new XmlSlurper().parse(resource.getFile()));
     }
   }
   return results;
 }
 // Copies a set of resources to a given directory. The set is specified
 // by an Ant-style path-matching pattern.
 public void copyGrailsResources(Object destDir, Object pattern, boolean overwrite)
     throws FileNotFoundException, IOException {
   new File(destDir.toString()).mkdirs();
   Resource[] resources = resolveResources("classpath:" + pattern);
   for (Resource resource : resources) {
     if (resource.isReadable()) {
       copyGrailsResource(destDir + "/" + resource.getFilename(), resource, overwrite);
     }
   }
 }
 public void copyGrailsResource(Object targetFile, Resource resource, boolean overwrite)
     throws FileNotFoundException, IOException {
   File file = new File(targetFile.toString());
   if (overwrite || !file.exists()) {
     IOUtils.copy(resource.getInputStream(), new FileOutputStream(file));
   }
 }
  protected void loadEventHooks(@SuppressWarnings("hiding") BuildSettings buildSettings) {
    if (buildSettings == null) {
      return;
    }

    loadEventsScript(findEventsScript(new File(buildSettings.getUserHome(), ".grails/scripts")));
    loadEventsScript(findEventsScript(new File(buildSettings.getBaseDir(), "scripts")));

    PluginBuildSettings pluginSettings =
        (PluginBuildSettings) binding.getVariable("pluginSettings");
    for (Resource pluginBase : pluginSettings.getPluginDirectories()) {
      try {
        loadEventsScript(findEventsScript(new File(pluginBase.getFile(), "scripts")));
      } catch (IOException ex) {
        throw new RuntimeException(ex);
      }
    }
  }
  /**
   * Loads a GrailsApplication using the given ResourceLocator instance which will search for
   * appropriate class names
   */
  public DefaultGrailsApplication(org.codehaus.groovy.grails.io.support.Resource[] resources) {
    this();
    for (org.codehaus.groovy.grails.io.support.Resource resource : resources) {

      Class<?> aClass;
      try {
        aClass =
            cl.loadClass(
                org.codehaus.groovy.grails.io.support.GrailsResourceUtils.getClassName(
                    resource.getFile().getAbsolutePath()));
      } catch (ClassNotFoundException e) {
        throw new GrailsConfigurationException(
            "Class not found loading Grails application: " + e.getMessage(), e);
      } catch (IOException e) {
        throw new GrailsConfigurationException(
            "Class not found loading Grails application: " + e.getMessage(), e);
      }
      loadedClasses.add(aClass);
    }
  }