Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  • getTwoWayPasswordEncoder()
  • setTwoWayPasswordEncoder()

MetaStoreFactory

The basics

For your convenience we provided you with a MetaStoreFactory to facilitate the specific use-case of serializing POJO.
Consider a class annotated with @MetaStoreElementType and where private members are annotated with @MetaStoreAttribute 
  

...

public void saveElement( T t ) throws MetaStoreException;
public List<T> getElements() throws MetaStoreException;
public void deleteElement( String name ) throws MetaStoreException;
public List<String> getElementNames() throws MetaStoreException;
public IMetaStoreElementType getElementType() throws MetaStoreException;

One factory calling another

If you have one element referencing another by name we can pass a factory to another factory to handle automatic persistence.

See for example the following :

    MetaStoreFactory<X> factoryX = new MetaStoreFactory<X>( X.class, metaStore, "pentaho" );
    MetaStoreFactory<Y> factoryY = new MetaStoreFactory<Y>( Y.class, metaStore, "pentaho" );
    factoryX.addNameFactory( X.FACTORY_Y, factoryY );

Code Block

    MetaStoreFactory<X> factoryX = new MetaStoreFactory<X>( X.class, metaStore, "pentaho" );

    MetaStoreFactory<Y> factoryY = new MetaStoreFactory<Y>( Y.class, metaStore, "pentaho" );

    factoryX.addNameFactory( X.FACTORY_Y, factoryY );

In this situation, if you call factoryX.saveElement() you will also persist any referenced elements of Y which are annotated as followed in class X:

Code Block

@MetaStoreAttribute( factoryNameKey = FACTORY_Y, factoryNameReference = true )  private List<Y> ys;


//and/or  


@MetaStoreAttribute( factoryNameKey = FACTORY_Y, factoryNameReference = true )  private Y y;

The factory is then also used when you are loading elements.

IMPORTANT NOTE: Do not rely on the referenced classes to be unique instances.  If you want that goal, pass unique lists of elements to the factory using addNameList()

Optionally shared

Since you don't always want elements to be shared and visible for the whole metastore to see, you can make an element optionally shared and as such, optionally 'embedded' in the parent element attributes.
To do this, you simply tell the factory what the name is of the boolean field which expresses the fact that the element is shared.
For example, if you have a "shared" flag in class B:

Code Block

@MetaStoreAttribute
private boolean shared;

 

In this case you can reference this in class A as follows:

Code Block

@MetaStoreAttribute( factoryNameKey = FACTORY_B, factoryNameReference = true, factorySharedIndicatorName = "shared" )  
private B b;

The factory will then automatically determine to either create or update an element for B or embed it in the attributes of the A element.