/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
def iterateOverActiveComponents(applyFunction) {

    // Start is not a real component, therefore loading it manually
    applyFunction file("${rootDir}/framework/start")

    def rootComponents = new XmlParser().parse("${rootDir}/framework/base/config/component-load.xml")
    rootComponents.children().each { rootComponent ->
        File componentLoadFile = file "${rootDir}/"+ rootComponent.@"parent-directory" + "/component-load.xml"

        if(componentLoadFile.exists()) {
            // iterate through the components defined in component-load.xml
            def parsedComponents = new XmlParser().parse(componentLoadFile.toString())
            parsedComponents.children().each { component ->
                def componentLocation = file "${rootDir}/"+ rootComponent.@"parent-directory" + '/' + component.@"component-location"
                applyIfEnabled(componentLocation, applyFunction)
            }
        } else {
            // iterate through all components (subdirectories of the root component)
            file(rootComponent.@"parent-directory").eachDir { componentLocation ->
                applyIfEnabled(componentLocation, applyFunction)
            }
        }
    }
}

def applyIfEnabled(componentDir, applyFunction) {
    File componentFile = file componentDir.toString() + '/ofbiz-component.xml'
    if(componentFile.exists()) {
        def parsedComponent = new XmlParser().parse(componentFile.toString())
        if(parsedComponent.@enabled == null || parsedComponent.@enabled == "true") {
            applyFunction componentDir
        }
    }
}

ext{
    iterateOverActiveComponents = this.&iterateOverActiveComponents
}
