Пример #1
0
  public BaseSettingsApi(
      BuildSettings settings, GrailsBuildEventListener buildEventListener, boolean interactive) {
    buildSettings = settings;
    buildProps = buildSettings.getConfig().toProperties();
    grailsHome = buildSettings.getGrailsHome();

    metadataFile = new File(buildSettings.getBaseDir(), "application.properties");

    metadata = metadataFile.exists() ? Metadata.getInstance(metadataFile) : Metadata.getCurrent();

    metadataFile = metadata.getMetadataFile();
    enableProfile = Boolean.valueOf(getPropertyValue("grails.script.profile", false).toString());
    pluginsHome = buildSettings.getProjectPluginsDir().getPath();
    pluginSettings = GrailsPluginUtils.getPluginBuildSettings(settings);
    grailsAppName = metadata.getApplicationName();
    isInteractive = interactive;

    // If no app name property (upgraded/new/edited project) default to basedir.
    if (grailsAppName == null) {
      grailsAppName = buildSettings.getBaseDir().getName();
    }

    if (grailsAppName.indexOf('/') > -1) {
      appClassName =
          grailsAppName.substring(grailsAppName.lastIndexOf('/'), grailsAppName.length());
    } else {
      appClassName = GrailsNameUtils.getClassNameRepresentation(grailsAppName);
    }
    configSlurper = buildSettings.createConfigSlurper();
    configSlurper.setEnvironment(buildSettings.getGrailsEnv());
    this.buildEventListener = buildEventListener;
  }
Пример #2
0
  private void addAssociationToTarget(String name, Object target, Object obj) {
    if (obj == null) {
      return;
    }

    MetaClassRegistry reg = GroovySystem.getMetaClassRegistry();
    MetaClass mc = reg.getMetaClass(target.getClass());
    final String addMethodName = "addTo" + GrailsNameUtils.getClassNameRepresentation(name);
    mc.invokeMethod(target, addMethodName, obj);
  }
  /**
   * Overrides method invocation to return dynamic artefact methods.
   *
   * <p>We will support getXXXXClasses() and isXXXXClass(class)
   *
   * @param methodName The name of the method
   * @param args The arguments to the method
   * @return The return value of the method TODO Need to add matches for
   *     add<Artefact>Class(java.lang.Class) and add<Artefact>Class(GrailsClass)
   */
  @Override
  public Object invokeMethod(String methodName, Object args) {

    Object[] argsv = (Object[]) args;

    Matcher match = GETCLASS_PATTERN.matcher(methodName);
    // look for getXXXXClass(y)
    match.find();
    if (match.matches()) {
      if (argsv.length > 0) {
        if (argsv[0] instanceof CharSequence) argsv[0] = argsv[0].toString();
        if ((argsv.length != 1) || !(argsv[0] instanceof String)) {
          throw new IllegalArgumentException(
              "Dynamic method get<Artefact>Class(artefactName) requires a single String parameter");
        }
        return getArtefact(match.group(2), argsv[0].toString());
      }

      // It's a no-param getter
      return super.invokeMethod(methodName, args);
    }

    // look for isXXXXClass(y)
    match = ISCLASS_PATTERN.matcher(methodName);
    // find match
    match.find();
    if (match.matches()) {
      if ((argsv.length != 1) || !(argsv[0] instanceof Class<?>)) {
        throw new IllegalArgumentException(
            "Dynamic method is<Artefact>Class(artefactClass) requires a single Class parameter");
      }

      return isArtefactOfType(match.group(2), (Class<?>) argsv[0]);
    }

    // look for getXXXXClasses
    match = GETCLASSESMETH_PATTERN.matcher(methodName);
    // find match
    match.find();
    if (match.matches()) {
      String artefactName = GrailsNameUtils.getClassNameRepresentation(match.group(2));
      if (artefactHandlersByName.containsKey(artefactName)) {
        return getArtefacts(match.group(2));
      }

      throw new IllegalArgumentException(
          "Dynamic method get<Artefact>Classes() called for "
              + "unrecognized artefact: "
              + match.group(2));
    }

    return super.invokeMethod(methodName, args);
  }
 /**
  * Override property access and hit on xxxxClasses to return class arrays of artefacts.
  *
  * @param propertyName The name of the property, if it ends in *Classes then match and invoke
  *     internal ArtefactHandler
  * @return All the artifacts or delegate to super.getProperty
  */
 @Override
 public Object getProperty(String propertyName) {
   // look for getXXXXClasses
   final Matcher match = GETCLASSESPROP_PATTERN.matcher(propertyName);
   // find match
   match.find();
   if (match.matches()) {
     String artefactName = GrailsNameUtils.getClassNameRepresentation(match.group(1));
     if (artefactHandlersByName.containsKey(artefactName)) {
       return getArtefacts(artefactName);
     }
   }
   return super.getProperty(propertyName);
 }
 public void targetFinished(BuildEvent buildEvent) {
   String targetName = buildEvent.getTarget().getName();
   String eventName = GrailsNameUtils.getClassNameRepresentation(targetName) + "End";
   triggerEvent(eventName, binding);
 }