} );
JSONArray val = new JSONArray();
for ( int i = 0; i < pkgs.length; i++ )
{
Clause export = new Clause( pkgs[i].getName(), pkgs[i].getDirectives(), pkgs[i].getAttributes() );
collectExport( val, export.getName(), export.getAttribute( Constants.VERSION_ATTRIBUTE ) );
}
WebConsoleUtil.keyVal( jw, "Exported Packages", val );
}
else
{
WebConsoleUtil.keyVal( jw, "Exported Packages", "---" );
}
}
target = ( String ) dict.get( Constants.IMPORT_PACKAGE );
if ( target != null )
{
Clause[] pkgs = Parser.parseHeader( target );
if ( pkgs != null && pkgs.length > 0 )
{
Map imports = new TreeMap();
for ( int i = 0; i < pkgs.length; i++ )
{
Clause pkg = pkgs[i];
imports.put( pkg.getName(), new Clause( pkg.getName(), pkg.getDirectives(), pkg.getAttributes() ) );
}
// collect import packages first
final Map candidates = new HashMap();
PackageAdmin packageAdmin = getPackageAdmin();
if ( packageAdmin != null )
{
ExportedPackage[] exports = packageAdmin.getExportedPackages( ( Bundle ) null );
if ( exports != null && exports.length > 0 )
{
for ( int i = 0; i < exports.length; i++ )
{
final ExportedPackage ep = exports[i];
Clause imp = ( Clause ) imports.get( ep.getName() );
if ( imp != null && isSatisfied( imp, ep ) )
{
candidates.put( ep.getName(), ep );
}
}
}
}
// now sort
JSONArray val = new JSONArray();
if ( imports.size() > 0 )
{
for ( Iterator ii = imports.values().iterator(); ii.hasNext(); )
{
Clause r4Import = ( Clause ) ii.next();
ExportedPackage ep = ( ExportedPackage ) candidates.get( r4Import.getName() );
// if there is no matching export, check whether this
// bundle has the package, ignore the entry in this case
if ( ep == null )
{
String path = r4Import.getName().replace( '.', '/' );
if ( bundle.getEntry( path ) != null )
{
continue;
}
}
collectImport( val, r4Import.getName(), r4Import.getAttribute( Constants.VERSION_ATTRIBUTE ),
Constants.RESOLUTION_OPTIONAL.equals( r4Import
.getDirective( Constants.RESOLUTION_DIRECTIVE ) ), ep, pluginRoot );
}
}
else
{