ConfigurationBundleRoot.java :  » Google-tech » peaberry » org » ops4j » peaberry » activation » internal » Java Open Source

Java Open Source » Google tech » peaberry 
peaberry » org » ops4j » peaberry » activation » internal » ConfigurationBundleRoot.java
package org.ops4j.peaberry.activation.internal;

import java.util.Dictionary;
import java.util.List;

import com.google.inject.Injector;
import com.google.inject.Key;
import com.google.inject.spi.DefaultBindingTargetVisitor;
import com.google.inject.spi.ProviderInstanceBinding;

public class ConfigurationBundleRoot implements BundleRoot {
  /** List of keys for which we must extract ConfigProvider and populate it */
  private final List<Key<?>> keys;
  /** Moves a config item from the Dictionary to a Guice provider */
  private final DefaultBindingTargetVisitor<Object, Object> mover = 
    new DefaultBindingTargetVisitor<Object, Object> () {
      public Object visit(ProviderInstanceBinding<?> target) {
        final Dictionary<String, Object> props = tracker.getValue();
        final ConfigurableProvider<?> prov = (ConfigurableProvider<?>) target.getProviderInstance();
        prov.set(props.get(prov.key()));
        return null;
      }
    };
  /** The last config we have obtained */
  private ConfigurationBundleActivationTracker tracker;
  
  public ConfigurationBundleRoot(List<Key<?>> keys, ConfigurationBundleActivationTracker tracker) {
    this.keys = keys;
    this.tracker = tracker;
  }
  
  public boolean canActivate() {
    return tracker.getValue() != null;
  }
  
  public void activate(Injector injector) {
    for (final Key<?> k : keys) {
      injector.getBinding(k).acceptTargetVisitor(mover);
    }
  }

  public void deactivate() {
  }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.