package jef.database.meta; public abstract class AbstractExtensionConfig implements ExtensionConfig { protected String name; protected AbstractMetadata parent; private TupleMetadata extension; protected AbstractExtensionConfig(String name, AbstractMetadata parent) { this.name = name; this.parent = parent; init(); } private void init() { if (extension == null) { extension = MetaHolder.getDynamicMeta(name); if (extension == null) { throw new IllegalArgumentException("Can not found extension definition [" + name + "] for " + this.parent.getName()); } } } @Override public String getName() { return name; } @Override public TupleMetadata getExtensionMeta() { return extension; } private AbstractMetadata mergedMeta; @Override public AbstractMetadata getMeta() { if (mergedMeta == null) { mergedMeta = merge(); } return mergedMeta; } protected abstract AbstractMetadata merge(); @Override public void flush(DynamicMetadata meta) { mergedMeta = null; } }