out.println("  public org.cougaar.domain.planning.ldm.dq.DataQuality getDataQuality() { return null; }");
println(out,"  public org.cougaar.domain.planning.ldm.dq.DataQuality getDataQuality() { return null; }");
    void writeNullClass(PrintWriter out, String context, String className) {      out.println();      // null class implementation      out.println("/** Null_PG implementation for "+className+" **/");      out.println("static final class Null_"+className+"\n"+                  "  implements "+className+", Null_PG\n"+                  "{");      // declare the slots      Vector slotspecs = getAllSlotSpecs(context);      Enumeration se = slotspecs.elements();      while (se.hasMoreElements()) {        String slotspec = ((String)se.nextElement()).trim();        int s = slotspec.indexOf(" ");        String type = slotspec.substring(0,s);        String name = slotspec.substring(s+1);        ActiveSlot as = parseActiveSlot(slotspec);        if (as != null) {          name = as.name;        }        String etype = null;        CollectionType ct = parseCollectionType(type);        if (ct != null) {          type = ct.ctype;          etype = ct.etype;        }        String clname = toClassName(name);                String slotdoc = null;        String depp = (String)p.get(context,name+".deprecated");        if (depp != null) {          slotdoc="@deprecated "+depp;        }        if (slotdoc!=null)           out.println("  /** "+slotdoc+" **/");        if (as!=null) {          out.println("  public "+type+" "+as.getterSpec()+"{ throw new UndefinedValueException(); }");        } else {          out.println("  public "+type+" get"+clname+"() { throw new UndefinedValueException(); }");        }        // extra collection type api        if (etype != null) {          out.println("  public boolean in"+clname+"("+etype+" element) { return false; }");          out.println("  public "+etype+"[] get"+clname+"AsArray() { return null; }");          out.println("  public "+etype+" getIndexed"+clname+"(int index) { throw new UndefinedValueException(); }");        }      }            Vector v = getAllDelegateSpecs(context);      if (v != null) {        for (int i =0; i<v.size(); i++) {          Argument dv = (Argument) v.elementAt(i);          // define delegate getter and setter if non-automatic          String autop = (String)p.get(context, dv.name+".auto");          // if it isn't automatic, define the setter and getter          if (!(autop != null && Boolean.valueOf(autop).booleanValue())) {            out.println("  public "+dv.type+" get"+toClassName(dv.name)+"() {\n"+                        "    throw new UndefinedValueException();\n"+                        "  }");            out.println("  public void set"+toClassName(dv.name)+"("+dv.type+" _"+dv.name+") {\n"+                        "    throw new UndefinedValueException();\n"+                        "  }");          }          Vector dsv = parseDelegateSpecs(p.get(context, dv.name+".delegate"));          for (int j=0; j<dsv.size(); j++) {            DelegateSpec ds = (DelegateSpec) dsv.elementAt(j);            out.println("  public "+ds.type+" "+ds.name+                        "("+unparseArguments(ds.args,true)+") {"+                        " throw new UndefinedValueException(); "+                        "}");          }        }      }      // TimePhased getters      if (p.get(context, PGParser.TIMEPHASED) != null) {        out.println("  public long getStartTime() { throw new UndefinedValueException(); }");        out.println("  public long getEndTime() { throw new UndefinedValueException(); }");      }      out.println("  public Object clone() throws CloneNotSupportedException {\n"+                  "    throw new CloneNotSupportedException();\n"+                  "  }");      out.println("  public NewPropertyGroup unlock(Object key) { return null; }");      out.println("  public PropertyGroup lock(Object key) { return null; }");      out.println("  public PropertyGroup lock() { return null; }");      out.println("  public PropertyGroup copy() { return null; }");      out.println("  public Class getPrimaryClass(){return primaryClass;}");      out.println("  public String getAssetGetMethod() {return assetGetter;}");      out.println("  public String getAssetSetMethod() {return assetSetter;}");      out.println("  public Class getIntrospectionClass() {\n"+                  "    return "+className+"Impl.class;\n"+                  "  }");      // implement PG basic api - null never has DQ      out.println();      out.println("  public boolean hasDataQuality() { return false; }");      if (hasDQ(context)) {     // if the class has it, we need to implement the getter        out.println("  public org.cougaar.domain.planning.ldm.dq.DataQuality getDataQuality() { return null; }");      }      out.println("}");    }