Package org.foo.dosgi.hooks

Source Code of org.foo.dosgi.hooks.ImportedServiceListenerHook

package org.foo.dosgi.hooks;

import java.util.Collection;

import org.apache.felix.sigil.common.osgi.ExprVisitor;
import org.apache.felix.sigil.common.osgi.LDAPExpr;
import org.apache.felix.sigil.common.osgi.LDAPParser;
import org.apache.felix.sigil.common.osgi.SimpleTerm;
import org.foo.dosgi.helper.LogUtil;
import org.foo.dosgi.helper.RegistryWatcher;
import org.osgi.framework.Constants;
import org.osgi.framework.hooks.service.ListenerHook;

public class ImportedServiceListenerHook implements ListenerHook {

  private static final LogUtil log = LogUtil.getLog(ImportedServiceListenerHook.class.getName());
  private final RegistryWatcher watcher;

  public ImportedServiceListenerHook(RegistryWatcher watcher) {
    this.watcher = watcher;
  }

  public void added(Collection listeners) {
    for (final ListenerInfo info : (Collection<ListenerInfo>) listeners) {
      if (!info.isRemoved()) {
        log.info("Adding listener " + info);
        LDAPExpr expr = LDAPParser.parseExpression(info.getFilter());
        expr.visit(new ExprVisitor() {
          public void visitExpr(LDAPExpr expr) {
            if (expr instanceof SimpleTerm) {
              SimpleTerm term = (SimpleTerm) expr;
              if (term.getName().equals(Constants.OBJECTCLASS)) {
                watcher.addWatch(term.getRval(), info.getFilter());
              }
            }
          }
        });
      }
    }
  }

  public void removed(Collection listeners) {
    for (final ListenerInfo info : (Collection<ListenerInfo>) listeners) {
      LDAPExpr expr = LDAPParser.parseExpression(info.getFilter());
      expr.visit(new ExprVisitor() {
        public void visitExpr(LDAPExpr expr) {
          if (expr instanceof SimpleTerm) {
            SimpleTerm term = (SimpleTerm) expr;
            if (term.getName().equals(Constants.OBJECTCLASS)) {
              watcher.removeWatch(term.getRval(), info.getFilter());
            }
          }
        }
      });
    }
  }
}
TOP

Related Classes of org.foo.dosgi.hooks.ImportedServiceListenerHook

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.