// Path: src/main/java/org/dynaform/xml/form/FormElement.java
// public interface FormElement<E> extends Form, Data<E>, Labeled {
// 	
//   Data<E> getData();
//   
//   Restrictions<E> getRestrictions();
//   
// 	String getLabel();
// 	void setLabel(String label);
// 	
// 	Control getControl();
// 	void setControl(Control control);
// 	
// 	boolean isReadOnly();
// 	void setReadOnly(boolean readOnly);
// 	
// 	boolean isRequired();
// 	void setRequired(boolean required);
// 	
// 	boolean isDisabled();
// 	void setDisabled(boolean disabled);
// 	
// 	// Listeners
// 	
//   void addListener(ElementChangeListener<E> listener);
//   void removeListener(ElementChangeListener<E> listener);
//   
//   public interface ElementChangeListener<E> {
//     void onSetValue(FormElement<E> element);
//     void onSetLabel(FormElement<E> element);
//     void onSetControl(FormElement<E> element);
//     void onSetReadOnly(FormElement<E> element);
//     void onSetRequired(FormElement<E> element);
//     void onSetDisabled(FormElement<E> element);
//   }	
// 	
// }
// 
// Path: src/main/java/org/dynaform/xml/form/FormFunction.java
// public interface FormFunction<T> {
// 	
// 	<E> T element(FormElement<E> element);
// 	
// 	<F extends Form> T section(FormSection<F> section);
// 	
// 	<F extends Form> T repeat(FormRepeat<F> sequence);
// 	
// 	T sequence(FormSequence composite);
// 	
// 	T choice(FormChoice choice);
// 	
// 	T all(FormAll all);
// 
// }
// 
// Path: src/main/java/org/dynaform/xml/form/FormVisitor.java
// public interface FormVisitor {
// 
// 	<E> void element(FormElement<E> element);
// 	
// 	<F extends Form> void section(FormSection<F> section);
// 	
// 	<F extends Form> void repeat(FormRepeat<F> sequence);
// 	
// 	void sequence(FormSequence composite);
// 	
// 	void choice(FormChoice choice);
// 	
// 	void all(FormAll all);
// 	
// }
// 
// Path: src/main/java/org/dynaform/xml/form/impl/restriction/RestrictionsImpl.java
// public class RestrictionsImpl<E> implements Restrictions<E> {
// 
//   private final List<Choice<E>> choices = new ArrayList<Choice<E>>(); 
//   
//   private Integer length;
//   private Integer minLength;
//   private Integer maxLength;
//   
//   private E minInclusive;
//   private E minExclusive;
//   private E maxInclusive;
//   private E maxExclusive;
//   
//   public List<Choice<E>> getChoices() {
//     return choices;
//   }
// 
//   public Integer getLength() {
//     return length;
//   }
// 
//   public void setLength(Integer length) {
//     this.length = length;
//   }
// 
//   public Integer getMinLength() {
//     return minLength;
//   }
// 
//   public void setMinLength(Integer minLength) {
//     this.minLength = minLength;
//   }
// 
//   public Integer getMaxLength() {
//     return maxLength;
//   }
// 
//   public void setMaxLength(Integer maxLength) {
//     this.maxLength = maxLength;
//   }
// 
//   public E getMinInclusive() {
//     return minInclusive;
//   }
// 
//   public void setMinInclusive(E minInclusive) {
//     this.minInclusive = minInclusive;
//   }
// 
//   public E getMinExclusive() {
//     return minExclusive;
//   }
// 
//   public void setMinExclusive(E minExclusive) {
//     this.minExclusive = minExclusive;
//   }
// 
//   public E getMaxInclusive() {
//     return maxInclusive;
//   }
// 
//   public void setMaxInclusive(E maxInclusive) {
//     this.maxInclusive = maxInclusive;
//   }
// 
//   public E getMaxExclusive() {
//     return maxExclusive;
//   }
// 
//   public void setMaxExclusive(E maxExclusive) {
//     this.maxExclusive = maxExclusive;
//   }
// 
// }


import org.dynaform.xml.form.FormElement;
import org.dynaform.xml.form.FormFunction;
import org.dynaform.xml.form.FormVisitor;
import org.dynaform.xml.form.control.Control;
import org.dynaform.xml.form.data.Data;
import org.dynaform.xml.form.impl.restriction.RestrictionsImpl;
import org.dynaform.xml.form.restriction.Restrictions;
import java.util.ArrayList;
import java.util.Collection;

package org.dynaform.xml.form.impl;



/**
 * Form element.
 * 
 * @author Rein Raudjärv
 * @param <F> data type.
 */
public class FormElementImpl<F> extends BaseForm implements FormElement<F> {

	private static final long serialVersionUID = 1L;
	
	private final String id;
	private final Data<F> data;

// Path: src/main/java/org/dynaform/xml/form/FormElement.java
// public interface FormElement<E> extends Form, Data<E>, Labeled {
// 	
//   Data<E> getData();
//   
//   Restrictions<E> getRestrictions();
//   
// 	String getLabel();
// 	void setLabel(String label);
// 	
// 	Control getControl();
// 	void setControl(Control control);
// 	
// 	boolean isReadOnly();
// 	void setReadOnly(boolean readOnly);
// 	
// 	boolean isRequired();
// 	void setRequired(boolean required);
// 	
// 	boolean isDisabled();
// 	void setDisabled(boolean disabled);
// 	
// 	// Listeners
// 	
//   void addListener(ElementChangeListener<E> listener);
//   void removeListener(ElementChangeListener<E> listener);
//   
//   public interface ElementChangeListener<E> {
//     void onSetValue(FormElement<E> element);
//     void onSetLabel(FormElement<E> element);
//     void onSetControl(FormElement<E> element);
//     void onSetReadOnly(FormElement<E> element);
//     void onSetRequired(FormElement<E> element);
//     void onSetDisabled(FormElement<E> element);
//   }	
// 	
// }
// 
// Path: src/main/java/org/dynaform/xml/form/FormFunction.java
// public interface FormFunction<T> {
// 	
// 	<E> T element(FormElement<E> element);
// 	
// 	<F extends Form> T section(FormSection<F> section);
// 	
// 	<F extends Form> T repeat(FormRepeat<F> sequence);
// 	
// 	T sequence(FormSequence composite);
// 	
// 	T choice(FormChoice choice);
// 	
// 	T all(FormAll all);
// 
// }
// 
// Path: src/main/java/org/dynaform/xml/form/FormVisitor.java
// public interface FormVisitor {
// 
// 	<E> void element(FormElement<E> element);
// 	
// 	<F extends Form> void section(FormSection<F> section);
// 	
// 	<F extends Form> void repeat(FormRepeat<F> sequence);
// 	
// 	void sequence(FormSequence composite);
// 	
// 	void choice(FormChoice choice);
// 	
// 	void all(FormAll all);
// 	
// }
// 
// Path: src/main/java/org/dynaform/xml/form/impl/restriction/RestrictionsImpl.java
// public class RestrictionsImpl<E> implements Restrictions<E> {
// 
//   private final List<Choice<E>> choices = new ArrayList<Choice<E>>(); 
//   
//   private Integer length;
//   private Integer minLength;
//   private Integer maxLength;
//   
//   private E minInclusive;
//   private E minExclusive;
//   private E maxInclusive;
//   private E maxExclusive;
//   
//   public List<Choice<E>> getChoices() {
//     return choices;
//   }
// 
//   public Integer getLength() {
//     return length;
//   }
// 
//   public void setLength(Integer length) {
//     this.length = length;
//   }
// 
//   public Integer getMinLength() {
//     return minLength;
//   }
// 
//   public void setMinLength(Integer minLength) {
//     this.minLength = minLength;
//   }
// 
//   public Integer getMaxLength() {
//     return maxLength;
//   }
// 
//   public void setMaxLength(Integer maxLength) {
//     this.maxLength = maxLength;
//   }
// 
//   public E getMinInclusive() {
//     return minInclusive;
//   }
// 
//   public void setMinInclusive(E minInclusive) {
//     this.minInclusive = minInclusive;
//   }
// 
//   public E getMinExclusive() {
//     return minExclusive;
//   }
// 
//   public void setMinExclusive(E minExclusive) {
//     this.minExclusive = minExclusive;
//   }
// 
//   public E getMaxInclusive() {
//     return maxInclusive;
//   }
// 
//   public void setMaxInclusive(E maxInclusive) {
//     this.maxInclusive = maxInclusive;
//   }
// 
//   public E getMaxExclusive() {
//     return maxExclusive;
//   }
// 
//   public void setMaxExclusive(E maxExclusive) {
//     this.maxExclusive = maxExclusive;
//   }
// 
// }


// Path: src/main/java/org/dynaform/xml/form/impl/FormElementImpl.java
import org.dynaform.xml.form.FormElement;
import org.dynaform.xml.form.FormFunction;
import org.dynaform.xml.form.FormVisitor;
import org.dynaform.xml.form.control.Control;
import org.dynaform.xml.form.data.Data;
import org.dynaform.xml.form.impl.restriction.RestrictionsImpl;
import org.dynaform.xml.form.restriction.Restrictions;
import java.util.ArrayList;
import java.util.Collection;

package org.dynaform.xml.form.impl;



/**
 * Form element.
 * 
 * @author Rein Raudjärv
 * @param <F> data type.
 */
public class FormElementImpl<F> extends BaseForm implements FormElement<F> {

	private static final long serialVersionUID = 1L;
	
	private final String id;
	private final Data<F> data;

	private final Restrictions<F> restrictions = new RestrictionsImpl<F>();
