public abstract class NamespaceBehaviour<K,V, N extends IdentifierNamespace<K, V>> implements Identifiable<Class<N>>{
public enum StorageNodeType {
- Global,
- SourceLocalSpecial,
- StatementLocal
+ GLOBAL,
+ SOURCE_LOCAL_SPECIAL,
+ STATEMENT_LOCAL,
}
public interface Registry {
-
- abstract <K, V, N extends IdentifierNamespace<K, V>> NamespaceBehaviour<K, V, N> getNamespaceBehaviour(Class<N> type);
-
+ <K, V, N extends IdentifierNamespace<K, V>> NamespaceBehaviour<K, V, N> getNamespaceBehaviour(Class<N> type);
}
public interface NamespaceStorageNode {
@Nullable <K, V, N extends IdentifierNamespace<K, V>> V getFromLocalStorage(Class<N> type, K key);
+ //<K, V, N extends IdentifierNamespace<K, V>> Map<K, V> getAllFromLocalStorage(Class<N> type);
+
@Nullable <K, V, N extends IdentifierNamespace<K, V>> void addToLocalStorage(Class<N> type, K key, V value);
}
private final Class<N> identifier;
-
protected NamespaceBehaviour(Class<N> identifier) {
this.identifier = Preconditions.checkNotNull(identifier);
}
* Creates global namespace behaviour for supplied namespace type.
*
* Global behaviour stores and loads all values from root {@link NamespaceStorageNode}
- * with type of {@link StorageNodeType#Global}.
+ * with type of {@link StorageNodeType#GLOBAL}.
*
* @param identifier Namespace identifier.
* @return global namespace behaviour for supplied namespace type.
*/
public static @Nonnull <K,V, N extends IdentifierNamespace<K, V>> NamespaceBehaviour<K,V,N> global(Class<N> identifier) {
- return new StorageSpecific<>(identifier, StorageNodeType.Global);
+ return new StorageSpecific<>(identifier, StorageNodeType.GLOBAL);
}
/**
*
* Source-local namespace behaviour stores and loads all values from closest
* {@link NamespaceStorageNode} ancestor with type of
- * {@link StorageNodeType#SourceLocalSpecial}.
+ * {@link StorageNodeType#SOURCE_LOCAL_SPECIAL}.
*
* @param identifier Namespace identifier.
* @return source-local namespace behaviour for supplied namespace type.
*/
public static <K,V, N extends IdentifierNamespace<K, V>> NamespaceBehaviour<K,V,N> sourceLocal(Class<N> identifier) {
- return new StorageSpecific<>(identifier, StorageNodeType.SourceLocalSpecial);
+ return new StorageSpecific<>(identifier, StorageNodeType.SOURCE_LOCAL_SPECIAL);
}
/**
}
public abstract V getFrom(NamespaceStorageNode storage, K key);
- public abstract void addTo(NamespaceStorageNode storage,K key,V value);
+ //public abstract Map<K, V> getAllFrom(NamespaceStorageNode storage);
+
+ public abstract void addTo(NamespaceStorageNode storage,K key,V value);
@Override
public Class<N> getIdentifier() {
return storage.getFromLocalStorage(getIdentifier(), key);
}
+// protected final Map<K, V> getAllFromLocalStorage(NamespaceStorageNode storage) {
+// return storage.getAllFromLocalStorage(getIdentifier());
+// }
+
protected final void addToStorage(NamespaceStorageNode storage,K key,V value) {
storage.addToLocalStorage(getIdentifier(),key,value);
}
@Override
public V getFrom(final NamespaceStorageNode storage, final K key) {
NamespaceStorageNode current = storage;
- while(current.getParentNamespaceStorage() != null) {
+ while(current.getStorageNodeType() != storageType) {
current = current.getParentNamespaceStorage();
}
return getFromLocalStorage(current,key);
}
+// @Override
+// public Map<K, V> getAllFrom(final NamespaceStorageNode storage) {
+// NamespaceStorageNode current = storage;
+// while(current.getStorageNodeType() != storageType) {
+// current = current.getParentNamespaceStorage();
+// }
+// return getAllFromLocalStorage(current);
+// }
+
@Override
public void addTo(NamespaceBehaviour.NamespaceStorageNode storage, K key, V value) {
NamespaceStorageNode current = storage;
return null;
}
+// @Override
+// public Map<K, V> getAllFrom(final NamespaceStorageNode storage) {
+// NamespaceStorageNode current = storage;
+// while(current != null) {
+// final Map<K, V> val = getAllFromLocalStorage(current);
+// if(val != null) {
+// return val;
+// }
+// current = current.getParentNamespaceStorage();
+// }
+// return null;
+// }
+
@Override
public void addTo(NamespaceStorageNode storage,K key, V value) {
addToStorage(storage, key, value);
}
}
-
}