/*___INFO__MARK_BEGIN__*/
/*************************************************************************
 *
 *  The Contents of this file are made available subject to the terms of
 *  the Sun Industry Standards Source License Version 1.2
 *
 *  Sun Microsystems Inc., March, 2001
 *
 *
 *  Sun Industry Standards Source License Version 1.2
 *  =================================================
 *  The contents of this file are subject to the Sun Industry Standards
 *  Source License Version 1.2 (the "License"); You may not use this file
 *  except in compliance with the License. You may obtain a copy of the
 *  License at http://gridengine.sunsource.net/Gridengine_SISSL_license.html
 *
 *  Software provided under this License is provided on an "AS IS" basis,
 *  WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
 *  WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
 *  MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
 *  See the License for the specific provisions governing your rights and
 *  obligations concerning the Software.
 *
 *   The Initial Developer of the Original Code is: Sun Microsystems, Inc.
 *
 *   Copyright: 2001 by Sun Microsystems, Inc.
 *
 *   All Rights Reserved.
 *
 ************************************************************************/
/*___INFO__MARK_END__*/
/**
 *  Generated from java_rmi_jgdi_cache.jsp
 *  !!! DO NOT EDIT THIS FILE !!!
 */
<%
  final com.sun.grid.cull.JavaHelper jh = (com.sun.grid.cull.JavaHelper)params.get("javaHelper");
  final com.sun.grid.cull.CullDefinition cullDef = (com.sun.grid.cull.CullDefinition)params.get("cullDef");
  class JGDIRMICacheGenerator extends com.sun.grid.cull.AbstractGDIGenerator {
     
     public JGDIRMICacheGenerator(com.sun.grid.cull.CullObject cullObject) {
        super(cullObject.getIdlName(),  jh.getClassName(cullObject), cullObject);
        addPrimaryKeys(cullObject, jh);
     }
     
     public void genImport() {
        if(!(cullObject.getType() == cullObject.TYPE_PRIMITIVE || 
             cullObject.getType() == cullObject.TYPE_MAPPED)) {
%>import com.sun.grid.jgdi.configuration.<%=classname%>;        
<%        
        }
     } // end of genImport
     
     public void genUpdateMethod() {
%>

   /**
    *  Update <%=getPrimaryKeyCount() == 0 ? "the" : "a"%> <%=name%> object
    *
    *  @param obj  the <%=name%> object with the new values
    *  @throws RemoteException on any error
    */
   public void update<%=name%>(<%=classname%> obj) throws RemoteException {
      try {
         jgdi.update<%=name%>(obj);
      } catch( RemoteException re ) {
         handleError(re);
         throw re;
      }
<%
      if (cullObject.hasGetListOperation()) {
%>     
       finally {      
         <%=name%>Cache = null;
       }
<%
      }
%>      
   }
<%
    } // end of genUpdateMethod
     
    public void genGetMethod() {
%>      
   private <%=classname%> <%=name%>Cache = null;
   /**
    *   Get the <code><%=name%></code> object.
    *   @return the <code><%=name%></code> object
    *   @throws RemoteException on any error
    */
   public <%=classname%> get<%=name%>() throws RemoteException {
   
      if ( jgdi == null ) {
         return null;
      }
      if (<%=name%>Cache == null ) {
         try {
             <%=name%>Cache = jgdi.get<%=name%>();
         } catch( RemoteException re ) {
            handleError(re);
            return null;
         }
      }
      return <%=name%>Cache;
   }
   
<% } // end of genGetMethod
    
   public void genGetListMethod() {
%>
   private List <%=name%>Cache = null;
   /**
    *   Get all <code><%=name%></code> objects.
    *
    *   @return a list of <code><%=name%></code> objects
    *   @throws RemoteException on any error
    */
   public List get<%=name%>List() throws RemoteException {
   
      if ( jgdi == null ) {
         return Collections.EMPTY_LIST;
      }
      if (<%=name%>Cache == null ) {
         try {
             <%=name%>Cache = jgdi.get<%=name%>List();
         } catch( RemoteException re ) {
            handleError(re);
            return Collections.EMPTY_LIST;
         }
      }
      return <%=name%>Cache;
   }
<%
   } // end of genGetListMethod
   
   public void genAddMethod() {
%>
   /**
    *   Add a new <code><%=name%></code> object.
    *
    *   @param obj the new <code><%=name%></code> object
    *   @throws RemoteException on any error
    */
   public void add<%=name%>(<%=classname%> obj) throws RemoteException {
     try {
        jgdi.add<%=name%>(obj);
     } catch( RemoteException re ) {
        handleError(re);
        throw re;
     } <%
       
      if (cullObject.hasGetListOperation()) {
%> finally {      
         <%=name%>Cache = null;
       }
<%
      }
%>      
   }
   
<%
   } // end of genAddMethod
   
   public void genDeleteMethod() {
%>  
   
   /**
    *   Add a delete <code><%=name%></code> object.
    *
    *   @param obj the <code><%=name%></code> object with the primary key information
    *   @throws RemoteException on any error
    */
   public void delete<%=name%>(<%=classname%> obj) throws RemoteException {
     try {
        jgdi.delete<%=name%>(obj);
     } catch( RemoteException re ) {
        handleError(re);
        throw re;
     } <%
       
      if (cullObject.hasGetListOperation()) {
%> finally {      
         <%=name%>Cache = null;
       }
<%
      }
%>
   }
<%
  } // end of genDeleteMethod
  public void genDeleteByPrimaryKeyMethod() {
%>  
   /**
    *   Delete a a <code><%=name%></code> object by its primary key
    *
<%
   boolean first = true;
   for (java.util.Map.Entry<String, String> entry: primaryKeys.entrySet()) {
      String pkName = entry.getKey();
%>    *   @param <%=pkName%>  the <%=pkName%> of the <code><%=name%></code> object <%      
   }
%>      
    *   @throws RemoteException on any error
    */
   public void delete<%=name%>(<%
   first = true;
   for (java.util.Map.Entry<String, String> entry: primaryKeys.entrySet()) {
      String pkName = entry.getKey();
      String pkType = entry.getValue();
      if(first) {
         first = false;
      } else {
         %>, <%
      }
      %> <%=pkType%> <%=pkName%><%
   }
   %>) throws RemoteException {
   
      try {
          jgdi.delete<%=name%>(<%
   first = true;
   for (java.util.Map.Entry<String, String> entry: primaryKeys.entrySet()) {
      String pkName = entry.getKey();
      if(first) {
         first = false;
      } else {
         %>, <%
      }
      %><%=pkName%><%
   }             
              %>);
       } catch( RemoteException re ) {
          handleError(re);
       }            
   }
<%        
     } // end of genDeleteByPrimaryKeyMethod
  public void genGetByPrimaryKeyMethod() {
%>  
   /**
    *   Get a a <code><%=name%></code> object by its primary key
    *
<%
   boolean first = true;
   for (java.util.Map.Entry<String, String> entry: primaryKeys.entrySet()) {
      String pkName = entry.getKey();
%>    *   @param <%=pkName%>  the <%=pkName%> of the <code><%=name%></code> object <%      
   }
%>      
    *   @return the <code><%=name%></code> object or <code>null</code>
    *   @throws RemoteException on any error
    */
   public <%=classname%> get<%=name%>(<%
   first = true;
   for (java.util.Map.Entry<String, String> entry: primaryKeys.entrySet()) {
      String pkName = entry.getKey();
      String pkType = entry.getValue();
      if(first) {
         first = false;
      } else {
         %>, <%
      }
      %> <%=pkType%> <%=pkName%><%
   }
   %>) throws RemoteException {
   
      try {
          return jgdi.get<%=name%>(<%
   first = true;
   for (java.util.Map.Entry<String, String> entry: primaryKeys.entrySet()) {
      String pkName = entry.getKey();
      if(first) {
         first = false;
      } else {
         %>, <%
      }
      %><%=pkName%><%
   }             
              %>);
       } catch( RemoteException re ) {
          handleError(re);
          return null;
       }            
   }
<%        
     } // end of genGetByPrimaryKeyMethod
  } // end of class JGDIRMICacheGenerator
  
  // ---------------------------------------------------------------------------
  // Build Generator instances
  // ---------------------------------------------------------------------------
  java.util.List<JGDIRMICacheGenerator> generators = new java.util.ArrayList<JGDIRMICacheGenerator>();
  com.sun.grid.cull.CullObject cullObj = null;
  for (String name : cullDef.getObjectNames()) {
    cullObj = cullDef.getCullObject(name);
    generators.add(new JGDIRMICacheGenerator(cullObj));
  }
%>
package com.sun.grid.jgdi.rmi;


import java.rmi.RemoteException; 
import java.rmi.Remote;
import java.util.List;
import java.util.Collections;
import com.sun.grid.jgdi.JGDI;
import com.sun.grid.jgdi.JGDIException;

<% // Import all cull object names;
   for (JGDIRMICacheGenerator gen : generators) {
       gen.genImport();
    } // end of for
%>
    
    
/**
 *  This class implements a cache for the {@link JGDIRemote} interface.
 */
public class JGDIRemoteCache extends JGDIRemoteCacheBase implements JGDIRemote {

   /** Creates a new instance of JGDIRemoteCache */
   public JGDIRemoteCache() {
   }
   
   /**
    *  Create a new instanceof of JGDIRemoteCache
    *  @param jgdi  the jgdi remote service
    */
   public JGDIRemoteCache(JGDIRemote jgdi) {
      super(jgdi);
   }
   
<%
   for (JGDIRMICacheGenerator gen : generators) {
       gen.genMethods();
   } // end of for
%>
}
