/*******************************************************************************
 * Copyright (c) 2001, 2008 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.soda.sat.eclipse.dependency.observer.internal;

import org.eclipse.soda.sat.core.framework.interfaces.BundleDependencyListener;
import org.eclipse.soda.sat.core.service.BundleDependencyService;
import org.eclipse.soda.sat.core.util.BundleManifestUtility;
import org.osgi.framework.Bundle;

public class Observer extends Object implements BundleDependencyListener {
	private BundleDependencyService bundleDependencyService;
	
	public void bind(BundleDependencyService bundleDependencyService) {
		setBundleDependencyService(bundleDependencyService);
	}
	
	private String getBundleName(Bundle bundle) {
		BundleManifestUtility utility = BundleManifestUtility.getInstance();
		String name = utility.getBundleName(bundle);
		return name;
	}
	
	public void registered(Bundle importer, Bundle exporter) {
		String importerName = getBundleName(importer);
		String exporterName = getBundleName(exporter);
		System.out.println(importerName + " depends upon " + exporterName);
	}

	private void setBundleDependencyService(BundleDependencyService bundleDependencyService) {
		if (this.bundleDependencyService != null) {
			this.bundleDependencyService.removeBundleDependencyListener(this);
		}
		
		this.bundleDependencyService = bundleDependencyService;
		
		if (this.bundleDependencyService != null) {
			this.bundleDependencyService.addBundleDependencyListener(this);
		}
	}

	public void unbind() {
		setBundleDependencyService(null);
	}

	public void unregistered(Bundle importer, Bundle exporter) {
		String importerName = getBundleName(importer);
		String exporterName = getBundleName(exporter);
		System.out.println(importerName + " no longer depends upon " + exporterName);
	}
}