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

net.alloyggp.escaperope.rope.ropify.CoreWeavers Maven / Gradle / Ivy

There is a newer version: 0.0.5
Show newest version
package net.alloyggp.escaperope.rope.ropify;

import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;

import net.alloyggp.escaperope.rope.Rope;
import net.alloyggp.escaperope.rope.StringRope;

//TODO: Fill this out with additional core weavers.
public class CoreWeavers {

    public static final RopeWeaver INTEGER = new RopeWeaver() {
        @Override
        public Rope toRope(Integer i) {
            return StringRope.create(i.toString());
        }

        @Override
        public Integer fromRope(Rope rope) {
            return Integer.valueOf(rope.asString());
        }
    };

    //TODO: Should this have wildcards somewhere?
    public static  RopeWeaver> listOf(final RopeWeaver innerTypeWeaver) {
        return new ListRopeWeaver>() {
            @Override
            protected void addToList(List objects, RopeBuilder list) {
                for (T object : objects) {
                    list.add(innerTypeWeaver.toRope(object));
                }
            }

            @Override
            public List fromRope(RopeList ropes) {
                List objects = new ArrayList<>(ropes.size());
                for (Rope rope : ropes) {
                    objects.add(innerTypeWeaver.fromRope(rope));
                }
                return objects;
            }
        };
    }

    public static  RopeWeaver> setOf(final RopeWeaver innerTypeWeaver) {
        return new ListRopeWeaver>() {
            @Override
            protected void addToList(Set objects, RopeBuilder list) {
                for (T object : objects) {
                    list.add(innerTypeWeaver.toRope(object));
                }
            }

            @Override
            public Set fromRope(RopeList ropes) {
                Set objects = new LinkedHashSet<>(ropes.size());
                for (Rope rope : ropes) {
                    objects.add(innerTypeWeaver.fromRope(rope));
                }
                return objects;
            }


        };
    }

    //TODO: Singleton?
    public static RopeWeaver> listOfIntegers() {
        return listOf(INTEGER);
    }

    public static > RopeWeaver enumOf(final Class enumClass) {
        return new RopeWeaver() {
            @Override
            public Rope toRope(E object) {
                return StringRope.create(object.name());
            }

            @Override
            public E fromRope(Rope rope) {
                return Enum.valueOf(enumClass, rope.asString());
            }
        };
    }

    public static  RopeWeaver singletonOf(final T singleton) {
        return new RopeWeaver() {
            @Override
            public Rope toRope(T object) {
                return StringRope.create("");
            }

            @Override
            public T fromRope(Rope rope) {
                return singleton;
            }
        };
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy