next up previous contents
Next: Erzeugen eines Event Channel, Up: B Implementierungsbeispiele Previous: Objektaktivierung für den Tie-Ansatz,

6.3.6

Klasse AccountFactoryImpl.java, Kapitel

// AccountFactoryImpl.java
// last modified 30.10.97
// Factory for normal system accounts and NIS Accounts

import java.util.*;
import java.io.*;
import mytools.*;

public class AccountFactoryImpl extends sysagent._AccountFactoryImplBase
{
  public final String passwdFile = "/etc/passwd";
  public final String ypcatCmd ="/usr/bin/ypcat ";
  
  private org.omg.CORBA.ORB orb;
  private org.omg.CORBA.BOA boa;

  private Dictionary accDic = new Hashtable();  // Hashtable for IORs
  
  public AccountFactoryImpl(String name)
  {
    super(name);
    
    orb = org.omg.CORBA.ORB.init();
    boa = orb.BOA_init();

    FileInputStream source = null;
    BufferedReader in;
    String line;
    parseLineColon plc;

    Runtime shell = Runtime.getRuntime();
    Process process;
    InputStream input;
    BufferedReader reader;
    String out = new String(""); 

    SystemAccountImpl sysaccount_ref;
    sysagent.SystemAccount account;
    NISAccountImpl nisaccount_ref;
    sysagent.NISAccount nisaccount;
    
    // factory for normal system accounts
    // reads from /etc/passwd
    try {
      source = new FileInputStream(new File(passwdFile));
      in = new BufferedReader(new InputStreamReader(source));
      
      while(true) {
        line = in.readLine();
        if (line == null) break;
        plc = new parseLineColon(line);
        if (plc.field(1).equals("+"))
          continue;
        // login:passwd:id:gid:gecos:home:shell
        System.out.println("Creating account: " + plc.field(1) + "-"
                            + plc.field(2) + "-" + plc.field(3) + "-"
                            + plc.field(4) + "-" + plc.field(5) + "-"
                            + plc.field(6) + "-" + plc.field(7));
        // create new Account server object
        // tie model
        sysaccount_ref = new SystemAccountImpl(plc.field(1), plc.field(2),
                               (new Long(plc.field(3))).longValue(),
                               (new Long(plc.field(4))).longValue(),
                               plc.field(5), plc.field(6), plc.field(7));
        account = new sysagent._tie_SystemAccount(sysaccount_ref);
        // Make the object available to the ORB.
        boa.obj_is_ready(account);
        // Save object in dictionary
        accDic.put(plc.field(1), account);
      }
    }
    catch (IOException e) {
      e.printStackTrace(); 
    }
    finally {
      if(source != null)
        try { source.close(); } 
      catch (IOException e) { e.printStackTrace(); }
    }

    // factory for NISAccounts
    // output from ypcat passwd
    [...]
  
  public sysagent.Account open(String name)
  {
    // Lookup object in dictionary
    sysagent.Account acc = (sysagent.Account) accDic.get(name);
    
    // return the IOR 
    return acc;
  }

  public sysagent.Account[] list()
  {
    Enumeration enumAccounts = accDic.elements();
    sysagent.Account[] acclist = new sysagent.Account[accDic.size()];
    int count = 0;
    
    while (enumAccounts.hasMoreElements()) {
      acclist[count] = (sysagent.Account) enumAccounts.nextElement();
      count++;
    }
    
    return acclist;
  }  

  public void delete(String name) 
  {
    // get IOR 
    sysagent.Account acc = (sysagent.Account) accDic.get(name);
    // removes object with key <name> from dictionary
    accDic.remove(name);
    System.out.println("Account " + name + " deleted.");
    // and deactivate transient object
    boa.deactivate_obj(acc);
    System.out.println("Deleted object with IOR: " + acc);
  }

  // public void create()
  // not yet implemented
}



Copyright Munich Network Management Team