org.fusesource.cloudmix.controller.configadmindataprovider.ConfigAdminControllerDataProvider.java Source code

Java tutorial

Introduction

Here is the source code for org.fusesource.cloudmix.controller.configadmindataprovider.ConfigAdminControllerDataProvider.java

Source

/**
 *  Copyright (C) 2008 Progress Software, Inc. All rights reserved.
 *  http://fusesource.com
 *
 *  The software in this package is published under the terms of the AGPL license
 *  a copy of which has been included with this distribution in the license.txt file.
 */
package org.fusesource.cloudmix.controller.configadmindataprovider;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Dictionary;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import org.fusesource.cloudmix.common.ControllerDataProvider;
import org.fusesource.cloudmix.common.GridController;
import org.fusesource.cloudmix.common.controller.AgentController;
import org.fusesource.cloudmix.common.controller.FeatureController;
import org.fusesource.cloudmix.common.controller.ProfileController;
import org.fusesource.cloudmix.common.dto.Dependency;
import org.fusesource.cloudmix.common.dto.FeatureDetails;
import org.fusesource.cloudmix.common.dto.ProfileDetails;

import org.osgi.service.cm.ConfigurationException;
import org.osgi.service.cm.ManagedService;

public class ConfigAdminControllerDataProvider implements ControllerDataProvider, ManagedService {

    private static final Log LOG = LogFactory.getLog(ConfigAdminControllerDataProvider.class);

    private ConcurrentMap<String, AgentController> agents = new ConcurrentHashMap<String, AgentController>();
    private ConcurrentMap<String, FeatureController> features = new ConcurrentHashMap<String, FeatureController>();
    private ConcurrentMap<String, ProfileController> profiles = new ConcurrentHashMap<String, ProfileController>();
    private GridController grid;

    public ConfigAdminControllerDataProvider() {
    }

    public void updated(Dictionary dictionary) throws ConfigurationException {
        LOG.info("Updating controller data provider");
        loadFeatures(dictionary);
        loadProfiles(dictionary);
    }

    protected void loadFeatures(Dictionary dictionary) {
        int numFeatures = Integer.parseInt((String) dictionary.get("features"));
        for (int i = 1; i <= numFeatures; i++) {
            String name = (String) dictionary.get("feature." + i + ".name");
            String url = (String) dictionary.get("feature." + i + ".url");
            FeatureDetails fd = new FeatureDetails(name, url);
            String deps = (String) dictionary.get("feature." + i + ".deps");
            if (deps != null) {
                List<Dependency> dependencies = new ArrayList<Dependency>();
                for (String dep : deps.split(",")) {
                    Dependency d = new Dependency();
                    d.setFeatureId(dep);
                    dependencies.add(d);
                }
                fd.setDependencies(dependencies);
            }
            FeatureController fc = new FeatureController(grid, fd);
            addFeature(name, fc);
        }
    }

    protected void loadProfiles(Dictionary dictionary) {
        int numProfiles = Integer.parseInt((String) dictionary.get("profiles"));
        for (int i = 1; i <= numProfiles; i++) {
            String name = (String) dictionary.get("profile." + i + ".name");
            ProfileDetails pd = new ProfileDetails(name);
            String feats = (String) dictionary.get("profile." + i + ".features");
            if (feats != null) {
                List<Dependency> profileFeatures = new ArrayList<Dependency>();
                for (String feat : feats.split(",")) {
                    Dependency f = new Dependency();
                    f.setFeatureId(feat);
                    profileFeatures.add(f);
                }
                pd.setFeatures(profileFeatures);
            }
            ProfileController pc = new ProfileController(grid, pd);
            addProfile(name, pc);
        }
    }

    public AgentController addAgent(String id, AgentController agent) {
        return agents.putIfAbsent(id, agent);
    }

    public AgentController getAgent(String agentId) {
        return agents.get(agentId);
    }

    public AgentController removeAgent(String agentId) {
        return agents.remove(agentId);
    }

    public AgentController updateAgent(String id, AgentController agent) {
        synchronized (agents) {
            removeAgent(id);
            return addAgent(id, agent);
        }
    }

    public Collection<FeatureController> getFeatures() {
        return features.values();
    }

    public FeatureController getFeature(String featureId) {
        return features.get(featureId);
    }

    public FeatureController addFeature(String id, FeatureController featureController) {
        return features.putIfAbsent(id, featureController);
    }

    public FeatureController removeFeature(String featureId) {
        return features.remove(featureId);
    }

    public Collection<AgentController> getAgents() {
        return agents.values();
    }

    public ProfileController getProfile(String profileId) {
        return profiles.get(profileId);
    }

    public ProfileController addProfile(String id, ProfileController profileController) {
        return profiles.putIfAbsent(id, profileController);
    }

    public ProfileController removeProfile(String profileId) {
        return profiles.remove(profileId);
    }

    public Collection<ProfileController> getProfiles() {
        return profiles.values();
    }

    public GridController getGrid() {
        return grid;
    }

    public void setGrid(GridController g) {
        grid = g;
    }
}