
import java.util.Properties;

import org.osid.*;
import org.osid.provider.*;
import org.osid.shared.*;


public class provider {
    
    ProviderControlManager pcm;

    public provider(String impl) {

	OsidContext context = new OsidContext();
	try {
	    context.assignContext("com.harvestroad.authentication.username","vue");
	    context.assignContext("com.harvestroad.authentication.password","vue");
	    context.assignContext("com.harvestroad.authentication.host","bazzim.mit.edu");
	    context.assignContext("com.harvestroad.authentication.port","80");
	} catch (OsidException e) {
	    System.err.println("this should never happen");
	}


	
	try {
	    this.pcm = (ProviderControlManager) edu.mit.osidimpl.OsidLoader.getManager("org.osid.provider.ProviderControlManager", 
										       impl, context, 
										       new Properties());
	} catch (OsidException e) {
	    System.err.println("cannot load impl " + impl + ": " + e.getMessage());
	    e.printStackTrace();
	}
    }
    
    
    public void list() {
	try {
	    ProviderLookupManager plm = this.pcm.getProviderLookupManager();
	    ProviderIterator pi = plm.getProviders();
	    while (pi.hasNextProvider()) {
		printProvider(pi.getNextProvider());
	    }
	} catch (org.osid.provider.ProviderException pe) {
	    pe.printStackTrace();
	}
    }


    public void installed() {
        try {
            ProviderInstallationManager pim = this.pcm.getProviderInstallationManager();
            ProviderIterator pi = pim.getInstalledProviders();
            while (pi.hasNextProvider()) {
                printProvider(pi.getNextProvider());
            }
        } catch (org.osid.provider.ProviderException pe) {
            pe.printStackTrace();
        }
    }


    public void install() {

    }

    public void remove() {

    }

    private void printProvider(Provider p) {
	try {
	    System.out.println("\nProvider:    " + p.getDisplayName() + " (" + p.getId().getIdString() + ")");
	    System.out.println("Description: " + p.getDescription());
	} catch (SharedException se) {
	    System.err.println(se.getMessage());
	}
	
	return;
    }



    public static void main(String[] args) {

	argparser.ArgParser parser = new argparser.ArgParser("provider");

	parser.matchAllArgs(args, 0, argparser.ArgParser.EXIT_ON_ERROR);

	try {
	    provider p = new provider("edu.mit.osidimpl.provider.repository");
	    p.list();
	    p.installed();
	} catch (Throwable t) {
	    t.printStackTrace();
	}
    }
}
