/** * *************************************************************** * JADE - Java Agent DEvelopment Framework is a framework to develop * multi-agent systems in compliance with the FIPA specifications. * Copyright (C) 2000 CSELT S.p.A. * * GNU Lesser General Public License * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation, * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. * ************************************************************** */ package jade.content.onto; //#APIDOC_EXCLUDE_FILE import jade.content.abs.*; import jade.content.schema.*; /** This introspector does nothing but "asking objects to convert themselves into/from abstract descriptors". It could be used when working in Java environments where the reflection is not supported (MIDP). All classes in an ontology using this introspector must implement the <code>Introspectable</code> interface. @author Giovanni Caire - TILAB */ public class MicroIntrospector implements Introspector { /** Check the structure of a java class associated to an ontological element to ensure that translations to/from abstract descriptors and java objects (instances of that class) can be accomplished by this introspector. This is the case if <code>javaClass</code> implements the <code>Introspectable</code> @param schema The schema of the ontological element @param javaClass The java class associated to the ontologcal element @param onto The Ontology that uses this Introspector @throws OntologyException if the java class does not have the correct structure */ public void checkClass(ObjectSchema schema, Class javaClass, Ontology onto) throws OntologyException { // FIXME: Not yet implemented } public Object getSlotValue(String slotName, Object obj, ObjectSchema schema) throws OntologyException { throw new OntologyException("UNsupported operation"); } public void setSlotValue(String slotName, Object slotValue, Object obj, ObjectSchema schema) throws OntologyException { throw new OntologyException("UNsupported operation"); } public AbsAggregate externalizeAggregate(String slotName, Object obj, ObjectSchema schema, Ontology referenceOnto) throws OntologyException { throw new NotAnAggregate(); } public Object internalizeAggregate(String slotName, AbsAggregate abs, ObjectSchema schema, Ontology referenceOnto) throws OntologyException { return null; } public AbsObject externalizeSpecialType(Object obj, ObjectSchema schema, Class javaClass, Ontology referenceOnto) throws OntologyException { try { AbsObject abs = schema.newInstance(); Introspectable intro = (Introspectable) obj; intro.externalise(abs, referenceOnto); return abs; } catch (OntologyException oe) { // Just forward the exception throw oe; } catch (ClassCastException cce) { throw new OntologyException("Object "+obj+" is not Introspectable"); } catch (Throwable t) { throw new OntologyException("Schema and Java class do not match", t); } } public Object internalizeSpecialType(AbsObject abs, ObjectSchema schema, Class javaClass, Ontology referenceOnto) throws OntologyException { try { Object obj = javaClass.newInstance(); //DEBUG System.out.println("Object created"); Introspectable intro = (Introspectable) obj; intro.internalise(abs, referenceOnto); return intro; } catch (OntologyException oe) { // Just forward the exception throw oe; } catch (ClassCastException cce) { throw new OntologyException("Class for type "+abs.getTypeName()+" is not Introspectable"); } catch (Throwable t) { throw new OntologyException("Schema and Java class do not match", t); } } }