// Path: src/main/java/de/fesere/hypermedia/cj/exceptions/ElementNotFoundException.java
// public class ElementNotFoundException extends RuntimeException {
//     public ElementNotFoundException(String message) {
//         super(message);
//     }
// }
// 
// Path: src/main/java/de/fesere/hypermedia/cj/exceptions/PropertyNotFoundException.java
// public class PropertyNotFoundException extends MalformedDataValueException {
//     public PropertyNotFoundException(String name, URI href, Class type) {
//         super("Did not find property '" + name + "' as " + type.getSimpleName() +" in " + href);
//     }
// }
// 
// Path: src/main/java/de/fesere/hypermedia/cj/model/data/BooleanDataEntry.java
// public class BooleanDataEntry extends BaseDataEntry<Boolean> {
//     private final boolean value;
// 
//     public BooleanDataEntry(String name, boolean booleanValue, String prompt) {
//         super(name, prompt);
//         this.value = booleanValue;
//     }
// 
//     @Override
//     public Boolean getValue() {
//         return value;
//     }
// }
// 
// Path: src/main/java/de/fesere/hypermedia/cj/model/data/NullDataEntry.java
// public class NullDataEntry extends BaseDataEntry {
//     public NullDataEntry(String name, String prompt) {
//         super(name, prompt);
//     }
// }
// 
// 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/model/data/StringDataEntry.java
// public class StringDataEntry extends BaseDataEntry<String> {
// 
//     private String value;
// 
//     public StringDataEntry(String name) {
//         this(name, "");
//     }
// 
//     public StringDataEntry(String name, String value) {
//         super(name);
//         this.value = value;
//     }
// 
//     public StringDataEntry(String name, String value, String prompt) {
//         super(name, prompt);
//         this.value = value;
//     }
// 
//     @Override
//     public String getValue() {
//         return value;
//     }
// }


import com.fasterxml.jackson.annotation.*;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import de.fesere.hypermedia.cj.exceptions.ElementNotFoundException;
import de.fesere.hypermedia.cj.exceptions.PropertyNotFoundException;
import de.fesere.hypermedia.cj.model.data.BooleanDataEntry;
import de.fesere.hypermedia.cj.model.data.NullDataEntry;
import de.fesere.hypermedia.cj.model.data.NumberDataEntry;
import de.fesere.hypermedia.cj.model.data.StringDataEntry;
import java.net.URI;
import java.util.*;
        this(href, links);
        this.data.addAll(entries);
    }

    public URI getHref() {
        return this.href;
    }

    public void addData(DataEntry dataEntry) {
        data.add(dataEntry);
    }

    public List<DataEntry> getData() {
        return new ArrayList<>(data);
    }

    public List<Link> getLinks() {
        return links;
    }

    public String getString(String name) {
        DataEntry found = findDataEntry(name);

        if (found instanceof StringDataEntry) {
            return ((StringDataEntry) found).getValue();
        }
        throw new PropertyNotFoundException(name, href, String.class);
    }

    public boolean isNullValue(String name) {
// Path: src/main/java/de/fesere/hypermedia/cj/exceptions/ElementNotFoundException.java
// public class ElementNotFoundException extends RuntimeException {
//     public ElementNotFoundException(String message) {
//         super(message);
//     }
// }
// 
// Path: src/main/java/de/fesere/hypermedia/cj/exceptions/PropertyNotFoundException.java
// public class PropertyNotFoundException extends MalformedDataValueException {
//     public PropertyNotFoundException(String name, URI href, Class type) {
//         super("Did not find property '" + name + "' as " + type.getSimpleName() +" in " + href);
//     }
// }
// 
// Path: src/main/java/de/fesere/hypermedia/cj/model/data/BooleanDataEntry.java
// public class BooleanDataEntry extends BaseDataEntry<Boolean> {
//     private final boolean value;
// 
//     public BooleanDataEntry(String name, boolean booleanValue, String prompt) {
//         super(name, prompt);
//         this.value = booleanValue;
//     }
// 
//     @Override
//     public Boolean getValue() {
//         return value;
//     }
// }
// 
// Path: src/main/java/de/fesere/hypermedia/cj/model/data/NullDataEntry.java
// public class NullDataEntry extends BaseDataEntry {
//     public NullDataEntry(String name, String prompt) {
//         super(name, prompt);
//     }
// }
// 
// 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/model/data/StringDataEntry.java
// public class StringDataEntry extends BaseDataEntry<String> {
// 
//     private String value;
// 
//     public StringDataEntry(String name) {
//         this(name, "");
//     }
// 
//     public StringDataEntry(String name, String value) {
//         super(name);
//         this.value = value;
//     }
// 
//     public StringDataEntry(String name, String value, String prompt) {
//         super(name, prompt);
//         this.value = value;
//     }
// 
//     @Override
//     public String getValue() {
//         return value;
//     }
// }


// Path: src/main/java/de/fesere/hypermedia/cj/model/Item.java
import com.fasterxml.jackson.annotation.*;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import de.fesere.hypermedia.cj.exceptions.ElementNotFoundException;
import de.fesere.hypermedia.cj.exceptions.PropertyNotFoundException;
import de.fesere.hypermedia.cj.model.data.BooleanDataEntry;
import de.fesere.hypermedia.cj.model.data.NullDataEntry;
import de.fesere.hypermedia.cj.model.data.NumberDataEntry;
import de.fesere.hypermedia.cj.model.data.StringDataEntry;
import java.net.URI;
import java.util.*;

        this(href, links);
        this.data.addAll(entries);
    }

    public URI getHref() {
        return this.href;
    }

    public void addData(DataEntry dataEntry) {
        data.add(dataEntry);
    }

    public List<DataEntry> getData() {
        return new ArrayList<>(data);
    }

    public List<Link> getLinks() {
        return links;
    }

    public String getString(String name) {
        DataEntry found = findDataEntry(name);

        if (found instanceof StringDataEntry) {
            return ((StringDataEntry) found).getValue();
        }
        throw new PropertyNotFoundException(name, href, String.class);
    }

    public boolean isNullValue(String name) {
       DataEntry found = findDataEntry(name);