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; }
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); }