All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.v5analytics.simpleorm.InMemoryTable Maven / Gradle / Ivy

There is a newer version: 1.3.1
Show newest version
package com.v5analytics.simpleorm;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class InMemoryTable {
    private final ModelMetadata modelMetadata;
    private final List data = new ArrayList<>();

    public InMemoryTable(Class rowClass) {
        this.modelMetadata = ModelMetadataBuilder.build(rowClass);
    }

    public Class getEntityRowClass() {
        return this.modelMetadata.getEntityRowClass();
    }

    public String getName() {
        return this.modelMetadata.getTableName();
    }

    public Iterable findAll(final SimpleOrmContext context) {
        final Iterable allItemsIterable = findAllItems(context);
        return new Iterable() {
            @Override
            public Iterator iterator() {
                final Iterator it = allItemsIterable.iterator();
                return new Iterator() {
                    @Override
                    public boolean hasNext() {
                        return it.hasNext();
                    }

                    @Override
                    public T next() {
                        return it.next().getObj();
                    }

                    @Override
                    public void remove() {
                        it.remove();
                    }
                };
            }
        };
    }

    public Iterable findAllItems(SimpleOrmContext context) {
        // TODO filter by authorizations
        return this.data;
    }

    public T findById(String id, SimpleOrmContext context) {
        Item item = findItemById(id, context);
        if (item == null) {
            return null;
        }
        return item.getObj();
    }

    private Item findItemById(String id, SimpleOrmContext context) {
        for (Item item : findAllItems(context)) {
            if (this.modelMetadata.getId(item.getObj()).equals(id)) {
                return item;
            }
        }
        return null;
    }

    public Iterable findByIdStartsWith(String idPrefix, SimpleOrmContext context) {
        List results = new ArrayList<>();
        for (T t : findAll(context)) {
            if (this.modelMetadata.getId(t).startsWith(idPrefix)) {
                results.add(t);
            }
        }
        return results;
    }

    public void save(T obj, String visibility, SimpleOrmContext context) {
        String id = this.modelMetadata.getId(obj);
        delete(id, context);
        this.data.add(new Item(id, obj, visibility));
    }

    public void delete(String id, SimpleOrmContext context) {
        Item item = findItemById(id, context);
        if (item == null) {
            return;
        }
        this.data.remove(item);
    }

    public void alterVisibility(T obj, String currentVisibility, String newVisibility, SimpleOrmContext context) {
        String id = this.modelMetadata.getId(obj);
        Item item = findItemById(id, context);
        if (item == null) {
            return;
        }
        item.setVisibility(newVisibility);
    }

    private class Item {
        private final String id;
        private final T obj;
        private String visibility;

        public Item(String id, T obj, String visibility) {
            this.id = id;
            this.obj = obj;
            this.visibility = visibility;
        }

        public T getObj() {
            return obj;
        }

        public String getVisibility() {
            return visibility;
        }

        public void setVisibility(String visibility) {
            this.visibility = visibility;
        }

        @Override
        public boolean equals(Object o) {
            if (this == o) {
                return true;
            }
            if (o == null || getClass() != o.getClass()) {
                return false;
            }

            //noinspection unchecked
            Item item = (Item) o;

            return !(id != null ? !id.equals(item.id) : item.id != null);

        }

        @Override
        public int hashCode() {
            return id != null ? id.hashCode() : 0;
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy