// Path: src/main/java/de/fesere/hypermedia/cj/model/builder/DataEntryFactory.java
// public final class DataEntryFactory {
// 
//     public static DataEntry create(String name, Object value, String prompt) {
// 
//         if(StringUtils.isBlank(name)){
//             return createNone();
//         }
// 
//         if(value == null) {
//            throw new MalformedDataValueException("value of '"+name+"' can not be null");
//         }
// 
//         Class type = value.getClass();
// 
//         if (TypeUtils.isString(type)) {
//             return new StringDataEntry(name, (String) value, prompt);
//         } else if (TypeUtils.isNumber(type)) {
//             return new NumberDataEntry(name, (Number) value, prompt);
//         } else if (TypeUtils.isBoolean(type)) {
//             return new BooleanDataEntry(name, (Boolean) value, prompt);
//         } else {
//            throw new SerializationException("'"+name+"' of type " + type + " can not be converted to DataEntry");
//         }
//     }
// 
//     public static DataEntry create(String name, Object value) {
//         return create(name, value, null);
//     }
// 
//     private static DataEntry createNone() {
//         return new NoneDataEntry("none");
//     }
// 
//     public static DataEntry createNull(String name, String prompt) {
//         return new NullDataEntry(name,prompt);
//     }
// 
//     public static DataEntry createNull(String name) {
//         return createNull(name, null);
//     }
// 
//     public static DataEntry createEmpty(String name, String prompt) {
//         return new StringDataEntry(name, "", prompt);
//     }
// 
//     public static DataEntry createEmpty(String name) {
//         return new StringDataEntry(name);
//     }
// }
// 
// Path: src/main/java/de/fesere/hypermedia/cj/model/builder/DataEntryFactory.java
// public static DataEntry create(String name, Object value, String prompt) {
// 
//     if(StringUtils.isBlank(name)){
//         return createNone();
//     }
// 
//     if(value == null) {
//        throw new MalformedDataValueException("value of '"+name+"' can not be null");
//     }
// 
//     Class type = value.getClass();
// 
//     if (TypeUtils.isString(type)) {
//         return new StringDataEntry(name, (String) value, prompt);
//     } else if (TypeUtils.isNumber(type)) {
//         return new NumberDataEntry(name, (Number) value, prompt);
//     } else if (TypeUtils.isBoolean(type)) {
//         return new BooleanDataEntry(name, (Boolean) value, prompt);
//     } else {
//        throw new SerializationException("'"+name+"' of type " + type + " can not be converted to DataEntry");
//     }
// }


import de.fesere.hypermedia.cj.model.builder.DataEntryFactory;
import org.junit.Test;
import java.io.IOException;
import java.util.Arrays;
import static de.fesere.hypermedia.cj.model.builder.DataEntryFactory.create;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.hasSize;
import static org.hamcrest.core.IsCollectionContaining.hasItems;
import static org.junit.Assert.assertNotNull;
package de.fesere.hypermedia.cj.model;





public class TemplateTest extends SerializationTestBase {

    @Test
    public void testCollectionWithTemplate() {
        Collection result = readCollection("examples/template-collection.json");

        assertThat(result.getTemplate().getData(), hasSize(4));
        assertThat(result.getTemplate().getData(), hasItems(name("full-name"), name("email"), name("blog"), name("avatar")));
        assertThat(result.getTemplate().getDataMap().keySet(), hasSize(4));
    }

    @Test
    public void test_fill() throws IOException {
        Template template = new Template(Arrays.asList(create("full-name", "", "Full Name"),
                create("age", ""),
                create("pi", ""),
                create("admin", "")));


// Path: src/main/java/de/fesere/hypermedia/cj/model/builder/DataEntryFactory.java
// public final class DataEntryFactory {
// 
//     public static DataEntry create(String name, Object value, String prompt) {
// 
//         if(StringUtils.isBlank(name)){
//             return createNone();
//         }
// 
//         if(value == null) {
//            throw new MalformedDataValueException("value of '"+name+"' can not be null");
//         }
// 
//         Class type = value.getClass();
// 
//         if (TypeUtils.isString(type)) {
//             return new StringDataEntry(name, (String) value, prompt);
//         } else if (TypeUtils.isNumber(type)) {
//             return new NumberDataEntry(name, (Number) value, prompt);
//         } else if (TypeUtils.isBoolean(type)) {
//             return new BooleanDataEntry(name, (Boolean) value, prompt);
//         } else {
//            throw new SerializationException("'"+name+"' of type " + type + " can not be converted to DataEntry");
//         }
//     }
// 
//     public static DataEntry create(String name, Object value) {
//         return create(name, value, null);
//     }
// 
//     private static DataEntry createNone() {
//         return new NoneDataEntry("none");
//     }
// 
//     public static DataEntry createNull(String name, String prompt) {
//         return new NullDataEntry(name,prompt);
//     }
// 
//     public static DataEntry createNull(String name) {
//         return createNull(name, null);
//     }
// 
//     public static DataEntry createEmpty(String name, String prompt) {
//         return new StringDataEntry(name, "", prompt);
//     }
// 
//     public static DataEntry createEmpty(String name) {
//         return new StringDataEntry(name);
//     }
// }
// 
// Path: src/main/java/de/fesere/hypermedia/cj/model/builder/DataEntryFactory.java
// public static DataEntry create(String name, Object value, String prompt) {
// 
//     if(StringUtils.isBlank(name)){
//         return createNone();
//     }
// 
//     if(value == null) {
//        throw new MalformedDataValueException("value of '"+name+"' can not be null");
//     }
// 
//     Class type = value.getClass();
// 
//     if (TypeUtils.isString(type)) {
//         return new StringDataEntry(name, (String) value, prompt);
//     } else if (TypeUtils.isNumber(type)) {
//         return new NumberDataEntry(name, (Number) value, prompt);
//     } else if (TypeUtils.isBoolean(type)) {
//         return new BooleanDataEntry(name, (Boolean) value, prompt);
//     } else {
//        throw new SerializationException("'"+name+"' of type " + type + " can not be converted to DataEntry");
//     }
// }


// Path: src/test/java/de/fesere/hypermedia/cj/model/TemplateTest.java
import de.fesere.hypermedia.cj.model.builder.DataEntryFactory;
import org.junit.Test;
import java.io.IOException;
import java.util.Arrays;
import static de.fesere.hypermedia.cj.model.builder.DataEntryFactory.create;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.hasSize;
import static org.hamcrest.core.IsCollectionContaining.hasItems;
import static org.junit.Assert.assertNotNull;

package de.fesere.hypermedia.cj.model;





public class TemplateTest extends SerializationTestBase {

    @Test
    public void testCollectionWithTemplate() {
        Collection result = readCollection("examples/template-collection.json");

        assertThat(result.getTemplate().getData(), hasSize(4));
        assertThat(result.getTemplate().getData(), hasItems(name("full-name"), name("email"), name("blog"), name("avatar")));
        assertThat(result.getTemplate().getDataMap().keySet(), hasSize(4));
    }

    @Test
    public void test_fill() throws IOException {
        Template template = new Template(Arrays.asList(create("full-name", "", "Full Name"),
                create("age", ""),
                create("pi", ""),
                create("admin", "")));


        Item item = new Item(Arrays.asList(DataEntryFactory.create("full-name", "Felipe Sere"), create("age", 46), create("pi", 3.14), create("admin", false)));