0 Replies Latest reply on Feb 6, 2008 9:37 PM by Scott Stark

    InstanceClassFactory needs to be split up

    Scott Stark Master

      I believe the InstanceClassFactory should be split up into a base ManagedPropertyMarshaller:

      public interface ManagedPropertyMarshaller<T extends Serializable>
      {
       /**
       * Get the value from object.
       *
       * @param beanInfo managed object's bean info
       * @param property managed property
       * @param attachment attachment
       * @return meta value
       */
       MetaValue getValue(BeanInfo beanInfo, ManagedProperty property, T attachment);
      
       /**
       * Set the value to object.
       *
       * @param beanInfo managed object's bean info
       * @param property managed property
       * @param attachment attachment
       * @param value meta value
       */
       void setValue(BeanInfo beanInfo, ManagedProperty property, T attachment, MetaValue value);
      }
      


      The InstanceClassFactory getManagedObjectClass method:
      public interface InstanceClassFactory<T extends Serializable> extends ManagedPropertyMarshaller<T>
      {
       /**
       * Return the Class that represents the root ManagedObject to scan
       * for management object related annotations.
       *
       * @param attachment - the instance a ManagedObject is to be created for.
       * @return the Class that represents the root ManagedObject.
       * @throws ClassNotFoundException if MO class not found
       */
       Class<? extends Serializable> getManagedObjectClass(T attachment) throws ClassNotFoundException;
      }
      


      and a separate RuntimeComponentName:
      public interface RuntimeComponentName<T extends Serializable>
      {
       /**
       * Get the runtime component name.
       *
       * @param beanInfo managed object's bean info
       * @param property managed property
       * @param attachment attachment
       * @param value original value
       * @return meta value
       */
       Object getComponentName(BeanInfo beanInfo, ManagedProperty property, T attachment, MetaValue value);
      }
      


      The ManagementProperty could then be updated to have specific marshallers declared:
      @Target({ElementType.METHOD})
      @Retention(RetentionPolicy.RUNTIME)
      public @interface ManagementProperty
      {
      ...
       /** The getValue/setValue marshaller factory */
       Class<? extends ManagedPropertyMarshaller> marshallerFactory() default NULL_MARSHALLER_FACTORY.class;
      }
      


      Right now its cumbersome to just override marshalling for a property due to the extra behaviors of the InstanceClassFactory.