blob: ca1b02d083652e62b1965fe11fbdbbcf9151d30c [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2003, 2006 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.osgi.framework.internal.core;
import java.io.IOException;
import java.net.URL;
import java.util.Enumeration;
import org.eclipse.osgi.framework.util.KeyedElement;
public abstract class PackageSource implements KeyedElement {
protected String id;
public PackageSource(String id) {
this.id = id.intern();
}
public String getId() {
return id;
}
public abstract SingleSourcePackage[] getSuppliers();
public boolean compare(KeyedElement other) {
return id.equals(((PackageSource) other).getId());
}
public int getKeyHashCode() {
return id.hashCode();
}
public Object getKey() {
return id;
}
public boolean isNullSource() {
return false;
}
public boolean isFriend(String symbolicName) {
return true;
}
public abstract Class loadClass(String name) throws ClassNotFoundException;
public abstract URL getResource(String name);
public abstract Enumeration getResources(String name) throws IOException;
//TODO See how this relates with FilteredSourcePackage. Overwriting or doing a double dispatch might be good.
// This is intentionally lenient; we don't force all suppliers to match (only one)
// it is better to get class cast exceptions in split package cases than miss an event
public boolean hasCommonSource(PackageSource other) {
if (other == null)
return false;
if (this == other)
return true;
SingleSourcePackage[] suppliers1 = getSuppliers();
SingleSourcePackage[] suppliers2 = other.getSuppliers();
if (suppliers1 == null || suppliers2 == null)
return false;
// This will return true if the specified source has at least one
// of the suppliers of this source.
for (int i = 0; i < suppliers1.length; i++)
for (int j = 0; j < suppliers2.length; j++)
if (suppliers2[j].equals(suppliers1[i]))
return true;
return false;
}
}