pt.webdetails.cdf.dd.FsPluginResourceLocations.java Source code

Java tutorial

Introduction

Here is the source code for pt.webdetails.cdf.dd.FsPluginResourceLocations.java

Source

/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
 * You can obtain one at http://mozilla.org/MPL/2.0/. */

package pt.webdetails.cdf.dd;

import java.util.ArrayList;
import java.util.List;

import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.dom4j.Element;
import org.pentaho.platform.api.engine.IPluginManager;
import org.pentaho.platform.engine.core.system.PentahoSystem;

import pt.webdetails.cpf.packager.origin.PathOrigin;
import pt.webdetails.cpf.packager.origin.OtherPluginStaticSystemOrigin;
import pt.webdetails.cdf.dd.util.CdeEnvironment;
import pt.webdetails.cpf.plugins.Plugin;
import pt.webdetails.cpf.plugins.PluginsAnalyzer;
import pt.webdetails.cpf.plugins.PluginsAnalyzer.PluginPair;

/**
 * @author dcleao
 */
public final class FsPluginResourceLocations {

    private List<PathOrigin> customComponentDirectories = new ArrayList<PathOrigin>();

    protected static final Log logger = LogFactory.getLog(FsPluginResourceLocations.class);

    public FsPluginResourceLocations() {
        initLocations();
    }

    public List<PathOrigin> getCustomComponentLocations() {
        return customComponentDirectories;
    }

    private void initLocations() {

        for (PathOrigin origin : CdeSettings.getCustomComponentLocations()) {
            customComponentDirectories.add(origin);
        }

        // External component locations
        PluginsAnalyzer pluginsAnalyzer = new PluginsAnalyzer(CdeEnvironment.getContentAccessFactory(),
                PentahoSystem.get(IPluginManager.class));
        pluginsAnalyzer.refresh();

        // FIXME will fail often if not everytime
        for (PluginPair<List<Element>> entry : pluginsAnalyzer.getPluginsWithSection("/cde-components/path")) {
            for (Element pathNode : entry.getValue()) {
                String path = StringUtils.strip(pathNode.getStringValue());
                String origin = pathNode.attributeValue("origin");//TODO:hcoded
                if (StringUtils.isEmpty(origin)) {
                    //FIXME:
                    customComponentDirectories.add(inferPathOriginFromLegacyLocation(entry.getPlugin(), path));
                    logger.debug(String.format("Found CDE components location declared in %s [%s]",
                            entry.getPlugin().getId(), path));
                }
            }

        }
    }

    private PathOrigin inferPathOriginFromLegacyLocation(Plugin plugin, String path) {
        //FIXME need extra method! and don't always assume system
        if (path.startsWith("system")) {
            path = StringUtils.removeStart(path, "system/");
            path = path.substring(path.indexOf("/"));
        }
        return new OtherPluginStaticSystemOrigin(plugin.getId(), path);
    }

}