// Path: src/main/java/de/fesere/hypermedia/cj/model/builder/ItemBuilder.java
// public class ItemBuilder {
// 
//     private List<DataEntry> dataEntries = new LinkedList<>();
//     private UriConstructor constructor;
//     private LinkBuilder linkBuilder;
// 
//     public ItemBuilder(URI href) {
//         constructor = new UriConstructor(href);
//         linkBuilder = new LinkBuilder(href);
//     }
// 
//     public ItemBuilder addData(DataEntry entry) {
//         dataEntries.add(entry);
//         return this;
//     }
// 
//     public LinkBuilder getLinkBuilder() {
//         return linkBuilder;
//     }
// 
//     public Item build() {
//         return new Item(constructor.getBase(), dataEntries, linkBuilder.build());
//     }
// }
// 
// Path: src/main/java/de/fesere/hypermedia/cj/model/builder/TemplateBuilder.java
// public class TemplateBuilder {
//     private List<DataEntry> entries = new LinkedList<>();
// 
//     public TemplateBuilder filledFromItem(Item item) {
//         setEntries(item.getData());
//         return this;
//     }
// 
//     private void setEntries(List<DataEntry> entries) {
//         this.entries.clear();
//         this.entries.addAll(entries);
//     }
// 
//     public TemplateBuilder emptyFromItem(Item item) {
//         List<DataEntry> itemEntries = getClearedDataEntries(item);
//         setEntries(itemEntries);
// 
//         return this;
//     }
// 
//     private List<DataEntry> getClearedDataEntries(Item item) {
//         List<DataEntry> itemEntries = item.getData();
//         List<DataEntry> clearedDataEntreis = new LinkedList<>();
//         for(DataEntry entry : itemEntries) {
//             clearedDataEntreis.add(DataEntryFactory.createEmpty(entry.getName()));
//         }
//         return clearedDataEntreis;
//     }
// 
// 
//     public TemplateBuilder emptyWithNames(String ... names) {
//         List<DataEntry> nameEntries = new LinkedList<>();
//         for(String name : names) {
//             nameEntries.add(DataEntryFactory.createEmpty(name));
//         }
//         setEntries(nameEntries);
//         return this;
//     }
// 
//     public Template build() {
//         return new Template(entries);
//     }
// }
// 
// Path: src/main/java/de/fesere/hypermedia/cj/model/data/NumberDataEntry.java
// public class NumberDataEntry extends BaseDataEntry<Number> {
// 
//     private Number value;
// 
//     public NumberDataEntry(String name, Number value, String prompt) {
//         super(name,  prompt);
//         this.value = value;
//     }
// 
//     @Override
//     public Number getValue() {
//         return value;
//     }
// }
// 
// Path: src/main/java/de/fesere/hypermedia/cj/transformer/ReadTransformation.java
// public interface ReadTransformation<T> {
// 
//     T transform(Item item);
// }
// 
// 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.ItemBuilder;
import de.fesere.hypermedia.cj.model.builder.TemplateBuilder;
import de.fesere.hypermedia.cj.model.data.NumberDataEntry;
import de.fesere.hypermedia.cj.transformer.ReadTransformation;
import org.junit.Test;
import java.net.URI;
import static de.fesere.hypermedia.cj.model.builder.DataEntryFactory.create;
import static org.hamcrest.core.Is.is;
import static org.junit.Assert.assertThat;
package de.fesere.hypermedia.cj.model;




public class TemplateConverterTest {

    @Test
    public void test_convertingFromFilledTemplateToDomain() {
        Item item = new ItemBuilder(URI.create("http://foo.com")).addData(create("name", "Felipe", "Users name")).addData(new NumberDataEntry("age", 24, "Users age")).build();
// Path: src/main/java/de/fesere/hypermedia/cj/model/builder/ItemBuilder.java
// public class ItemBuilder {
// 
//     private List<DataEntry> dataEntries = new LinkedList<>();
//     private UriConstructor constructor;
//     private LinkBuilder linkBuilder;
// 
//     public ItemBuilder(URI href) {
//         constructor = new UriConstructor(href);
//         linkBuilder = new LinkBuilder(href);
//     }
// 
//     public ItemBuilder addData(DataEntry entry) {
//         dataEntries.add(entry);
//         return this;
//     }
// 
//     public LinkBuilder getLinkBuilder() {
//         return linkBuilder;
//     }
// 
//     public Item build() {
//         return new Item(constructor.getBase(), dataEntries, linkBuilder.build());
//     }
// }
// 
// Path: src/main/java/de/fesere/hypermedia/cj/model/builder/TemplateBuilder.java
// public class TemplateBuilder {
//     private List<DataEntry> entries = new LinkedList<>();
// 
//     public TemplateBuilder filledFromItem(Item item) {
//         setEntries(item.getData());
//         return this;
//     }
// 
//     private void setEntries(List<DataEntry> entries) {
//         this.entries.clear();
//         this.entries.addAll(entries);
//     }
// 
//     public TemplateBuilder emptyFromItem(Item item) {
//         List<DataEntry> itemEntries = getClearedDataEntries(item);
//         setEntries(itemEntries);
// 
//         return this;
//     }
// 
//     private List<DataEntry> getClearedDataEntries(Item item) {
//         List<DataEntry> itemEntries = item.getData();
//         List<DataEntry> clearedDataEntreis = new LinkedList<>();
//         for(DataEntry entry : itemEntries) {
//             clearedDataEntreis.add(DataEntryFactory.createEmpty(entry.getName()));
//         }
//         return clearedDataEntreis;
//     }
// 
// 
//     public TemplateBuilder emptyWithNames(String ... names) {
//         List<DataEntry> nameEntries = new LinkedList<>();
//         for(String name : names) {
//             nameEntries.add(DataEntryFactory.createEmpty(name));
//         }
//         setEntries(nameEntries);
//         return this;
//     }
// 
//     public Template build() {
//         return new Template(entries);
//     }
// }
// 
// Path: src/main/java/de/fesere/hypermedia/cj/model/data/NumberDataEntry.java
// public class NumberDataEntry extends BaseDataEntry<Number> {
// 
//     private Number value;
// 
//     public NumberDataEntry(String name, Number value, String prompt) {
//         super(name,  prompt);
//         this.value = value;
//     }
// 
//     @Override
//     public Number getValue() {
//         return value;
//     }
// }
// 
// Path: src/main/java/de/fesere/hypermedia/cj/transformer/ReadTransformation.java
// public interface ReadTransformation<T> {
// 
//     T transform(Item item);
// }
// 
// 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/TemplateConverterTest.java
import de.fesere.hypermedia.cj.model.builder.ItemBuilder;
import de.fesere.hypermedia.cj.model.builder.TemplateBuilder;
import de.fesere.hypermedia.cj.model.data.NumberDataEntry;
import de.fesere.hypermedia.cj.transformer.ReadTransformation;
import org.junit.Test;
import java.net.URI;
import static de.fesere.hypermedia.cj.model.builder.DataEntryFactory.create;
import static org.hamcrest.core.Is.is;
import static org.junit.Assert.assertThat;

package de.fesere.hypermedia.cj.model;




public class TemplateConverterTest {

    @Test
    public void test_convertingFromFilledTemplateToDomain() {
        Item item = new ItemBuilder(URI.create("http://foo.com")).addData(create("name", "Felipe", "Users name")).addData(new NumberDataEntry("age", 24, "Users age")).build();
        Template template = new TemplateBuilder().filledFromItem(item).build();