Hi,
I definitely intended for this to be possible, but actually, it looks
as though it doesn't work. It -almost- works if you do it backwards:
have the defclass extend the regular deftemplate. Unfortunately, Jess
still throws an exception while constructing the shadow fact. I think
the fix for this would be easy -- look for this to work properly in
Jess 6.0 final. Thanks for the report.
I think Mikael Rundqvist (ERA) wrote:
[Charset iso-8859-1 unsupported, filtering to ASCII...]
> Hi,
> is it possible to do the following:
> 1 Make a deftemplate and inheriting from a dynamic java-bean and in the process
>adding some slots.
> (This works fine thru what is described in section 2.7.2 (deftemplate
><deftemplate-name> [extends <classname>] [<doc-comment>] [(slot <slot-name> [(default
>| default-dynamic <value>)] [(type <typespec>))]*)
> 2. ASSERT an ordered fact which is an instance of the deftemplate in 1 but which has
>all slots, but the ones created in the deftemplate, initialized using an instance of
>the java-bean.
>
> Example:
>
> package SE.ericsson.epk.NAM.DataTranscriptGeneratorPackage;
> import java.awt.*;
>
>
> /**
> * Java-bean style class to map between a table name and the corresponding
> * prefix when setting upp the table in MML.
> */
> public class MMLPrefixBean extends java.lang.Object implements Cloneable
> {
>
> /**
> * Default constructor necessary for a bean.
> */
> public MMLPrefixBean()
> {
> }
>
> /**
> * Setter method for the prefix attribute.
> *
> * @param prefix a three character wide string specifying the prefix to use
>when
> * configuring the table.
> * If a wider string is used as input the prefix will be shortened through cut.
> */
> public void setPrefix(String prefix)throws MMLSyntaxException {
> String oldValue=getPrefix();
> String newValue=null;
> if (prefix!=null) {
> newValue=new String(prefix.substring(0, 3));
> }
> if (prefix.length()==3) {
> if (oldValue!=newValue) {
> this.prefix=newValue;
> changes.firePropertyChange("prefix", oldValue, newValue);
> }
> } else {
> MMLSyntaxException MMLExc=new MMLSyntaxException();
> this.prefix=newValue;
> changes.firePropertyChange("prefix", oldValue, newValue);
> throw MMLExc;
> }
> }
>
>
> public java.lang.String getPrefix()
> {
> return this.prefix;
> }
>
> public void setDescription(java.lang.String description)
> {
> String oldValue=this.getDescription();
> String newValue=description;
> if (oldValue!=newValue) {
> this.description=newValue;
> changes.firePropertyChange("description", oldValue,
>newValue);
> }
> }
>
> public java.lang.String getDescription()
> {
> return this.description;
> }
>
> public void setTable(java.lang.String table)
> {
> String oldValue=this.getTable();
> String newValue=table;
> if (oldValue!=newValue) {
> this.table=newValue;
> changes.firePropertyChange("table", oldValue, newValue);
> }
> }
>
> public java.lang.String getTable()
> {
> return this.table;
> }
>
> public String toString() {
> return( this.getPrefix() + " : " + this.getTable() + " : " +
>this.getDescription());
> }
>
> public Object clone() {
> MMLPrefixBean copy=null;
> try {
> copy=new MMLPrefixBean();
> copy.setDescription(this.getDescription());
> copy.setPrefix(this.getPrefix());
> copy.setTable(this.getTable());
> }
> catch(MMLSyntaxException e) {
> System.out.println("Exception in MMLPrefixBean.clone(): ");
> }
> return copy;
> }
>
> public boolean equals (Object object){
> MMLPrefixBean otherBean=null;
> if (this.getClass()==object.getClass()) {
> otherBean=(MMLPrefixBean)object;
> return this.getPrefix().equals(otherBean.getPrefix()) &&
> this.getDescription().equals(otherBean.getDescription()) &&
> this.getTable().equals(otherBean.getTable());
> } else {
> return false;
> }
> }
>
> public void addPropertyChangeListener(java.beans.PropertyChangeListener pcl)
> {
> changes.addPropertyChangeListener(pcl);
> }
>
> public void removePropertyChangeListener(java.beans.PropertyChangeListener pcl)
> {
> changes.removePropertyChangeListener(pcl);
> }
>
> protected java.lang.String prefix = "";
> protected java.lang.String table = "";
> protected java.lang.String description = "";
> private symantec.itools.beans.PropertyChangeSupport changes = new
>symantec.itools.beans.PropertyChangeSupport(this);
>
> public static void main(String[] args) {
> MMLPrefixBean anMMLPrefixBean=null;
> MMLPrefixBean anotherMMLPrefixBean=null;
> try {
> anMMLPrefixBean=new MMLPrefixBean();
> anMMLPrefixBean.setPrefix("PNB");
> anMMLPrefixBean.setDescription("Prefix for PRE-ANALYSIS OF NUMBER
>INFORMATION FOR B-NUMBER ");
> anMMLPrefixBean.setTable("B-number Pre-analysis");
> System.out.println(anMMLPrefixBean);
> anMMLPrefixBean=new MMLPrefixBean();
> anMMLPrefixBean.setPrefix("ANB");
> anMMLPrefixBean.setDescription("Prefix for ANALYSIS OF B-NUMBER ");
> anMMLPrefixBean.setTable("B-number analysis");
> System.out.println(anMMLPrefixBean);
> anotherMMLPrefixBean=(MMLPrefixBean)anMMLPrefixBean.clone();
> if (anMMLPrefixBean.equals(anotherMMLPrefixBean)) {
> System.out.println("Clone and equal works!");
> }
> anMMLPrefixBean=new MMLPrefixBean();
> anMMLPrefixBean.setDescription("Prefix which is wrong ");
> anMMLPrefixBean.setTable("Z-nummer analysis");
> anMMLPrefixBean.setPrefix("ANBQ");
> System.out.println(anMMLPrefixBean);
>
> }
> catch (MMLSyntaxException MMLExc) {
> System.out.println("Fick ett MML Exception");
> System.out.println(anMMLPrefixBean);
> }
> }
> }
>
>
> (defclass MMLPrefixBean
>SE.ericsson.epk.NAM.DataTranscriptGeneratorPackage.MMLPrefixBean)
> (deftemplate myprefixtemplate extends MMLPrefixBean
> (slot foo)
>
> (bind ?anMMLPrefixBean (call
>SE.ericsson.epk.NAM.DataTranscriptGeneratorPackage.Control.getDefaultMMLPrefixBean))
>;retrieves a prefix-bean with all attributes set to default values.
>
> (definstance MyExtendedPrefixBean ?anMMLPrefixBean dynamic) ;this leads to the
>following error
> Jess reported an error in routine DefinstanceList.definstance
> while executing (definstance MyExtendedPrefixBean ?anMMLPrefixBean dynamic).
> Message: Unknown object class MyExtendedPrefixBean.
> Program text: ( definstance MyExtendedPrefixBean ?anMMLPrefixBean dynamic ) at
>line 23.
>
> (assert ?anMMLPrefixBean) ;this leads to the following error
> Jess reported an error in routine Value.factValue
> while executing Jess reported an error in routine Variable.resolveValue.
> Message: Null context for anMMLPrefixBean..
> Message: Not a fact:
>"<External-Address:SE.ericsson.epk.NAM.DataTranscriptGeneratorPackage.MMLPrefixBean>"
>(type = EXTERNAL_ADDRESS).
>
> I think I understand what I do wrong in both cases but is there a simple
>possiblility to assert a fact and have all the field initialized from the bean.
> /Mikael Rundqvist
>
> ---------------------------------------------------------------------
> To unsubscribe, send the words 'unsubscribe jess-users [EMAIL PROTECTED]'
> in the BODY of a message to [EMAIL PROTECTED], NOT to the
> list (use your own address!) List problems? Notify [EMAIL PROTECTED]
> ---------------------------------------------------------------------
>
---------------------------------------------------------
Ernest Friedman-Hill
Distributed Systems Research Phone: (925) 294-2154
Sandia National Labs FAX: (925) 294-2234
Org. 8920, MS 9012 [EMAIL PROTECTED]
PO Box 969 http://herzberg.ca.sandia.gov
Livermore, CA 94550
---------------------------------------------------------------------
To unsubscribe, send the words 'unsubscribe jess-users [EMAIL PROTECTED]'
in the BODY of a message to [EMAIL PROTECTED], NOT to the
list (use your own address!) List problems? Notify [EMAIL PROTECTED]
---------------------------------------------------------------------