/*___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_jgdi.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");
  
  final java.util.logging.Logger logger = java.util.logging.Logger.getLogger("cullconv");
  
  class JGDIGenerator extends com.sun.grid.cull.AbstractGDIGenerator {
     
     public JGDIGenerator(com.sun.grid.cull.CullObject cullObj) {
        super(cullObj.getIdlName(), jh.getClassName(cullObj), cullObj);
        addPrimaryKeys(cullObj, jh);
     }
     
     public void genImport() {
        if(!(cullObject.getType() == cullObject.TYPE_PRIMITIVE || 
             cullObject.getType() == cullObject.TYPE_MAPPED)) {
%>import com.sun.grid.jgdi.configuration.<%=classname%>;
<%        
        }
     }

public void genUpdateMethod() {
%>
   /**
    *   Update a <code><%=name%></code> object.
    *   @param obj   the <code><%=name%></code> object with the new values
    *   @throws JGDIException on any error on the GDI layer
    */
   public void update<%=name%>(<%=classname%> obj) throws JGDIException;

   /**
    *   Update a <code><%=name%></code> object.
    *   @param obj      the <code><%=name%></code> object with the new values
    *   @param answers  the <code>answer list</code> object
    *   @throws JGDIException on any error on the GDI layer
    */
   public void update<%=name%>WithAnswer(<%=classname%> obj, List<JGDIAnswer> answers) throws JGDIException;
<%        
    } // end of genUpdateMethod
    
    public void genGetMethod() {
%>
   /**
    *   Get the <code><%=name%></code> object.
    *   @return the <code><%=classname%></code> object.
    *   @throws JGDIException on any error on the GDI layer
    */
   public <%=classname%> get<%=name%>() throws JGDIException;

   /**
    *   Get the <code><%=name%></code> object.
    *   @param answers  the <code>answer list</code> object
    *   @return the <code><%=classname%></code> object.
    *   @throws JGDIException on any error on the GDI layer
    */
   public <%=classname%> get<%=name%>WithAnswer(List<JGDIAnswer> answers) throws JGDIException;
<%
} // end of genGetMethod
    
public void genGetListMethod() {
%>
   /**
    *   Get the list of all defined <code><%=name%></code> objects.
    *   @return list of <code><%=name%></code> objects
    *   @throws JGDIException on any error on the GDI layer
    */
   public List< <%=classname%> > get<%=name%>List() throws JGDIException;
   /**
    *   Get the list of all defined <code><%=name%></code> objects.
    *   @param answers  the <code>answer list</code> object    
    *   @return list of <code><%=name%></code> objects
    *   @throws JGDIException on any error on the GDI layer
    */
   public List< <%=classname%> > get<%=name%>ListWithAnswer(List<JGDIAnswer> answers) throws JGDIException;
<%
} // end of genGetListMethod
    
public void genAddMethod() {
%>    
   
   /**
    *   Add a new <code><%=name%></code> object.
    *   @param  obj      the new <code><%=name%></code> object
    *   @throws JGDIException on any error on the GDI layer
    */
   public void add<%=name%>(<%=classname%> obj) throws JGDIException;

   /**
    *   Add a new <code><%=name%></code> object.
    *   @param obj       the new <code><%=name%></code> object
    *   @param answers   the <code>answer list</code> object
    *   @throws JGDIException on any error on the GDI layer
    */
   public void add<%=name%>WithAnswer(<%=classname%> obj, List<JGDIAnswer> answers) throws JGDIException;

<% if ((name.equals("Manager")) || 
       (name.equals("Operator")) ||
       (name.equals("AdminHost")) || 
       (name.equals("SubmitHost"))) { %>
   /**
    *   Add a new <code><%=name%></code> object.
    *   @param  name the new <code>String</code> object
    *   @throws JGDIException on any error on the GDI layer
    */
   public void add<%=name%>(String name) throws JGDIException;

   /**
    *   Add a new <code><%=name%></code> object.
    *   @param  name the new <code>String</code> object
    *   @param  answers the <code>answer list</code> object
    *   @throws JGDIException on any error on the GDI layer
    */
   public void add<%=name%>WithAnswer(String name, List<JGDIAnswer> answers) throws JGDIException;

<%
     } // end if name.equals()
   } // end of genAddMethod

public void genDeleteMethod() {
%>
   /**
    *   Delete a <code><%=name%></code> object.
    *   @param obj  <code><%=name%></code> object with the primary key information
    *   @throws JGDIException on any error on the GDI layer
    */
   public void delete<%=name%>(<%=classname%> obj) throws JGDIException;
   
   /**
    *   Delete a <code><%=name%></code> object.
    *   @param obj       the <code><%=name%></code> object with the primary key information
    *   @param answers   the <code>answer list</code> object
    *   @throws JGDIException on any error on the GDI layer
    */
   public void delete<%=name%>WithAnswer(<%=classname%> obj, List<JGDIAnswer> answers) throws JGDIException;

<%
} // end of genDeleteMethod

public void genDeleteByPrimaryKeyMethod() {
%>
   /**
    *   Delete a <code><%=name%></code> object by its primary key
<%
    for (java.util.Map.Entry<String, String> entry: primaryKeys.entrySet()) {
       String pkName = entry.getKey();
       String pkType = entry.getValue();
%>    *  @param <%=pkName%>   the <%=pkName%> of the <code><%=name%></code> object
<%  } // end of for
%>    *  @throws JGDIException on any error on the GDI layer
    */
   public void delete<%=name%>(<%
      boolean 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%> <%
    } // end of for  
    %>) throws JGDIException;
   /**
    *   Delete a <code><%=name%></code> object by its primary key
<%
    for (java.util.Map.Entry<String, String> entry: primaryKeys.entrySet()) {
       String pkName = entry.getKey();
       String pkType = entry.getValue();
%>    *  @param <%=pkName%>   the <%=pkName%> of the <code><%=name%></code> object
<% 
    } // end of for    
%>    *  @param answers   the <code>answer list</code> object
    *  @throws JGDIException on any error on the GDI layer
    */
   public void delete<%=name%>WithAnswer(<%
      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%> <%
    } // end of for
    %>, List<JGDIAnswer> answers) throws JGDIException;


   /**
    *   Delete several <code><%=name%></code> objects by their primary key
<%
    for (java.util.Map.Entry<String, String> entry: primaryKeys.entrySet()) {
       String pkName = entry.getKey();
       // String pkType = entry.getValue();
%>    *  @param <%=pkName%>s   array of <%=pkName%> of the <code><%=name%></code> objects
<%
    } // end of for
%>    *  @param answers   the <code>answer list</code> object
    *  @throws JGDIException on any error on the GDI layer
    */
   public void delete<%=name%>sWithAnswer(<%
    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 {
            %> , <%           
       } 
       %> String[] <%=pkName%>s <%
    } // end of for
    %>
<% if (name.equals("Job") || name.equals("AdvanceReservation")) {%>
    , boolean forced, UserFilter userFilter
<% }%>    , List<JGDIAnswer> answers) throws JGDIException;
<%
} // end of genDeleteByPrimaryKeyMethod

public void genGetByPrimaryKeyMethod() {
%>
   /**
    *  Get a <%=name%> by its primary key
    *
    *  @return the <%=name%>
<%
    for (java.util.Map.Entry<String, String> entry: primaryKeys.entrySet()) {
       String pkName = entry.getKey();
       String pkType = entry.getValue();
%>    *  @param <%=pkName%>   the <%=pkName%> of the <code><%=name%></code> object
<%
    } // end of for
%>    *  @return the found <code><%=name%></code> object of <code>null</code>    
    *  @throws JGDIException on any error on the GDI layer
    */
   public <%=classname%> get<%=name%>(<%
    boolean 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%> <%
    } // end of for
    %>) throws JGDIException;

   /**
    *  Get a <%=name%> by its primary key
    *
    *  @return the <%=name%>
<%
    for (java.util.Map.Entry<String, String> entry: primaryKeys.entrySet()) {
       String pkName = entry.getKey();
       String pkType = entry.getValue();
%>    *  @param <%=pkName%>   the <%=pkName%> of the <code><%=name%></code> object
<%
    } // end of for
%>   *  @param answers   the <code>answer list</code> object  
    *  @return the found <code><%=name%></code> object of <code>null</code>    
    *  @throws JGDIException on any error on the GDI layer
    */
   public <%=classname%> get<%=name%>WithAnswer(<%
    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%> <%
    } // end of for
    %>, List<JGDIAnswer> answers) throws JGDIException;

<%
     } // end of genGetByPrimaryKeyMethod
} // end of class JGDIGenerator
  
  // --------------------------------------------------------------------------
  // Build all generator instances
  // --------------------------------------------------------------------------
  java.util.ArrayList<JGDIGenerator> generators = new java.util.ArrayList<JGDIGenerator>();
  for (String name : cullDef.getObjectNames()) {
    com.sun.grid.cull.CullObject cullObj = cullDef.getCullObject(name);
    logger.fine("JGDIGenerator->handle " + cullObj.getName() + "(" + cullObj.getOperationString() +")");
    generators.add(new JGDIGenerator(cullObj));
  }
%>

package com.sun.grid.jgdi;

import java.util.List;
import com.sun.grid.jgdi.JGDIException;
import com.sun.grid.jgdi.configuration.JGDIAnswer;
import com.sun.grid.jgdi.monitoring.filter.UserFilter;

<% // Import all cull object names;
   for (JGDIGenerator gen : generators) {
     gen.genImport();
   }
%>

/**
 *  <p>The class <code>JGDI</code> is the central interface for communication with
 *  the SGE master.</p>
 *
 *  <p>An instanceof of the interface can be obtained via the {@link JGDIFactory}. 
 *  For each <code>JGDI</code> instance the <code>close</code> method has to
 *  called to give the native parts of the implementation a chance to release
 *  the resources.</p>
 *
 *  <p>Example:</p>
 *  <pre>
 *     String url = "bootstrap:///opt/sge@default:1026";
 *     String user = "sge_admin";
 *     String password = "secret";
 *
 *     JGDI jgdi = JGDIFactory.newInstance(url, user, password);
 *     ...
 *     jgdi.close();
 *    
 *  </pre>
 *
 *  <strong>Warning:</strong>  The JGDI interface will not be compatible with future Sun&trade; Grid Engine releases. 
 *
 *  @version 6.5
 *
 */
public interface JGDI extends JGDIBase {
<%
  for (JGDIGenerator gen : generators) {
     gen.genMethods();
  }  
%>
   
}
