|
From: <ja...@us...> - 2006-10-03 02:26:52
|
Revision: 73
http://svn.sourceforge.net/surveyforge/?rev=73&view=rev
Author: javism
Date: 2006-09-29 08:28:51 -0700 (Fri, 29 Sep 2006)
Log Message:
-----------
Some changes in the inheritance of Questionnaire-QuestionnaireElement and some improvements in ValueDomain
Modified Paths:
--------------
trunk/surveyforge-core/src/main/java/org/surveyforge/core/metadata/DataElement.java
trunk/surveyforge-core/src/main/java/org/surveyforge/core/metadata/Register.java
trunk/surveyforge-core/src/main/java/org/surveyforge/core/metadata/RegisterDataElement.java
trunk/surveyforge-core/src/main/java/org/surveyforge/core/metadata/ValueDomain.java
trunk/surveyforge-core/src/main/java/org/surveyforge/core/metadata/domain/AbstractValueDomain.java
trunk/surveyforge-core/src/main/java/org/surveyforge/core/survey/Questionnaire.java
trunk/surveyforge-core/src/main/java/org/surveyforge/core/survey/QuestionnaireElement.java
trunk/surveyforge-core/src/test/java/org/surveyforge/core/metadata/DataElementTest.java
trunk/surveyforge-core/src/test/java/org/surveyforge/core/metadata/RegisterTest.java
trunk/surveyforge-core/src/test/java/org/surveyforge/core/survey/QuestionnaireElementTest.java
trunk/surveyforge-core/src/test/java/org/surveyforge/core/survey/QuestionnaireTest.java
Modified: trunk/surveyforge-core/src/main/java/org/surveyforge/core/metadata/DataElement.java
===================================================================
--- trunk/surveyforge-core/src/main/java/org/surveyforge/core/metadata/DataElement.java 2006-09-21 13:56:29 UTC (rev 72)
+++ trunk/surveyforge-core/src/main/java/org/surveyforge/core/metadata/DataElement.java 2006-09-29 15:28:51 UTC (rev 73)
@@ -35,12 +35,12 @@
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
-import javax.persistence.Table;
import javax.persistence.Transient;
-import javax.persistence.UniqueConstraint;
import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.IndexColumn;
@@ -52,6 +52,7 @@
* @author jsegura
*/
@Entity
+@Inheritance(strategy = InheritanceType.JOINED)
public abstract class DataElement implements Serializable
{
private static final long serialVersionUID = 0L;
Modified: trunk/surveyforge-core/src/main/java/org/surveyforge/core/metadata/Register.java
===================================================================
--- trunk/surveyforge-core/src/main/java/org/surveyforge/core/metadata/Register.java 2006-09-21 13:56:29 UTC (rev 72)
+++ trunk/surveyforge-core/src/main/java/org/surveyforge/core/metadata/Register.java 2006-09-29 15:28:51 UTC (rev 73)
@@ -21,13 +21,11 @@
*/
package org.surveyforge.core.metadata;
-import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import javax.persistence.CascadeType;
-import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
@@ -38,19 +36,22 @@
import org.hibernate.annotations.IndexColumn;
import org.surveyforge.core.data.RegisterData;
import org.surveyforge.core.metadata.domain.StructuredValueDomain;
-import org.surveyforge.core.survey.Questionnaire;
// TODO Elaborate on comments
/**
* @author jsegura
*/
@Entity
-public class Register extends DataElement implements Serializable
+public class Register extends RegisterDataElement
{
- private static final long serialVersionUID = 0L;
/**
+ *
+ */
+ private static final long serialVersionUID = -7481816596643587493L;
+
+ /**
* When defining hierarchical registers the hierarchy is expressed as master/detail relationship. The master register defines the
* objects that consist of the details.
*/
@@ -78,10 +79,10 @@
@OneToOne(cascade = {CascadeType.ALL})
private RegisterData registerData;
- /** */
- @OneToOne(mappedBy = "register", fetch = FetchType.LAZY, optional = true)
- // @OneToOne(fetch = FetchType.LAZY)
- private Questionnaire questionnaire;
+// /** */
+// @OneToOne(mappedBy = "register", fetch = FetchType.LAZY, optional = true)
+// // @OneToOne(fetch = FetchType.LAZY)
+// private Questionnaire questionnaire;
protected Register( )
@@ -94,9 +95,8 @@
*/
public Register( String identifier )
{
- this.setIdentifier( identifier );
+ super( identifier, new StructuredValueDomain( ) );
this.registerData = new RegisterData( this );
- this.setValueDomain( new StructuredValueDomain( ) );
}
/**
@@ -142,48 +142,48 @@
if( detailRegister != null ) this.detailRegisters.remove( detailRegister );
}
- @Override
- public List<? extends RegisterDataElement> getComponentElements( )
- {
- List<RegisterDataElement> componentElements = new ArrayList<RegisterDataElement>( );
- for( DataElement dataElement : super.getComponentElements( ) )
- componentElements.add( (RegisterDataElement) dataElement );
- return componentElements;
- }
+ // @Override
+ // public List<? extends RegisterDataElement> getComponentElements( )
+ // {
+ // List<RegisterDataElement> componentElements = new ArrayList<RegisterDataElement>( );
+ // for( DataElement dataElement : super.getComponentElements( ) )
+ // componentElements.add( (RegisterDataElement) dataElement );
+ // return componentElements;
+ // }
- @Override
- public void addComponentElement( DataElement componentElement )
- {
- if( !(componentElement instanceof RegisterDataElement) )
- throw new IllegalArgumentException( );
- else if( this.registerData.getObjectData( ).size( ) > 0 )
- throw new IllegalStateException( );
- else
- super.addComponentElement( componentElement );
- }
+ // @Override
+ // public void addComponentElement( DataElement componentElement )
+ // {
+ // if( !(componentElement instanceof RegisterDataElement) )
+ // throw new IllegalArgumentException( );
+ // else if( this.registerData.getObjectData( ).size( ) > 0 )
+ // throw new IllegalStateException( );
+ // else
+ // super.addComponentElement( componentElement );
+ // }
+ //
+ // @Override
+ // public void removeComponentElement( DataElement componentElement )
+ // {
+ // if( this.registerData.getObjectData( ).size( ) > 0 )
+ // throw new IllegalStateException( );
+ // else
+ // super.removeComponentElement( componentElement );
+ // }
+ //
+ // @Override
+ // public void setComponentElements( List<? extends DataElement> componentElements )
+ // {
+ // if( componentElements == null )
+ // throw new NullPointerException( );
+ // else if( this.registerData.getObjectData( ).size( ) > 0 )
+ // throw new IllegalStateException( );
+ // else if( this.key != null && !componentElements.containsAll( this.key ) )
+ // throw new IllegalArgumentException( );
+ // else
+ // super.setComponentElements( componentElements );
+ // }
- @Override
- public void removeComponentElement( DataElement componentElement )
- {
- if( this.registerData.getObjectData( ).size( ) > 0 )
- throw new IllegalStateException( );
- else
- super.removeComponentElement( componentElement );
- }
-
- @Override
- public void setComponentElements( List<? extends DataElement> componentElements )
- {
- if( componentElements == null )
- throw new NullPointerException( );
- else if( this.registerData.getObjectData( ).size( ) > 0 )
- throw new IllegalStateException( );
- else if( this.key != null && !componentElements.containsAll( this.key ) )
- throw new IllegalArgumentException( );
- else
- super.setComponentElements( componentElements );
- }
-
/**
* @return Returns the key.
*/
@@ -213,15 +213,15 @@
return this.registerData;
}
- public Questionnaire getQuestionnaire( )
- {
- return this.questionnaire;
- }
+// public Questionnaire getQuestionnaire( )
+// {
+// return (Questionnaire) super.getQuestionnaireElement( );
+// }
- public void setQuestionnaire( Questionnaire questionnaire )
- {
- this.questionnaire = questionnaire;
- }
+// public void setQuestionnaire( Questionnaire questionnaire )
+// {
+// this.questionnaire = questionnaire;
+// }
@Override
public boolean equals( Object object )
Modified: trunk/surveyforge-core/src/main/java/org/surveyforge/core/metadata/RegisterDataElement.java
===================================================================
--- trunk/surveyforge-core/src/main/java/org/surveyforge/core/metadata/RegisterDataElement.java 2006-09-21 13:56:29 UTC (rev 72)
+++ trunk/surveyforge-core/src/main/java/org/surveyforge/core/metadata/RegisterDataElement.java 2006-09-29 15:28:51 UTC (rev 73)
@@ -31,7 +31,6 @@
import org.surveyforge.core.metadata.domain.AbstractValueDomain;
import org.surveyforge.core.survey.Question;
-import org.surveyforge.core.survey.QuestionnaireElement;
/**
* Register data elements define data elements for a register. In contrast to an abstract data element a register data element is
@@ -54,8 +53,8 @@
@ManyToOne(optional = true)
private Question question;
- @OneToOne
- private QuestionnaireElement questionnaireElement;
+// @OneToOne
+// private QuestionnaireElement questionnaireElement;
protected RegisterDataElement( )
{};
@@ -182,18 +181,18 @@
/**
* @return the questionnaireElement
*/
- public QuestionnaireElement getQuestionnaireElement( )
- {
- return questionnaireElement;
- }
+// public QuestionnaireElement getQuestionnaireElement( )
+// {
+// return questionnaireElement;
+// }
/**
* @param questionnaireElement the questionnaireElement to set
*/
- public void setQuestionnaireElement( QuestionnaireElement questionnaireElement )
- {
- this.questionnaireElement = questionnaireElement;
- }
+// public void setQuestionnaireElement( QuestionnaireElement questionnaireElement )
+// {
+// this.questionnaireElement = questionnaireElement;
+// }
public AbstractValueDomain getValueDomain( )
{
Modified: trunk/surveyforge-core/src/main/java/org/surveyforge/core/metadata/ValueDomain.java
===================================================================
--- trunk/surveyforge-core/src/main/java/org/surveyforge/core/metadata/ValueDomain.java 2006-09-21 13:56:29 UTC (rev 72)
+++ trunk/surveyforge-core/src/main/java/org/surveyforge/core/metadata/ValueDomain.java 2006-09-29 15:28:51 UTC (rev 73)
@@ -22,12 +22,17 @@
package org.surveyforge.core.metadata;
import java.io.Serializable;
+import java.util.List;
+import org.surveyforge.core.metadata.domain.AbstractValueDomain;
+
/**
* @author jsegura
*/
public interface ValueDomain
{
public boolean isValid( Serializable object );
+
+ public List<AbstractValueDomain> getSubDomains( );
}
Modified: trunk/surveyforge-core/src/main/java/org/surveyforge/core/metadata/domain/AbstractValueDomain.java
===================================================================
--- trunk/surveyforge-core/src/main/java/org/surveyforge/core/metadata/domain/AbstractValueDomain.java 2006-09-21 13:56:29 UTC (rev 72)
+++ trunk/surveyforge-core/src/main/java/org/surveyforge/core/metadata/domain/AbstractValueDomain.java 2006-09-29 15:28:51 UTC (rev 73)
@@ -22,6 +22,8 @@
package org.surveyforge.core.metadata.domain;
import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
import javax.persistence.Column;
import javax.persistence.Entity;
@@ -59,7 +61,12 @@
{}
+ public List<AbstractValueDomain> getSubDomains( )
+ {
+ return new ArrayList<AbstractValueDomain>( );
+ }
+
@Override
public AbstractValueDomain clone( )
{
Modified: trunk/surveyforge-core/src/main/java/org/surveyforge/core/survey/Questionnaire.java
===================================================================
--- trunk/surveyforge-core/src/main/java/org/surveyforge/core/survey/Questionnaire.java 2006-09-21 13:56:29 UTC (rev 72)
+++ trunk/surveyforge-core/src/main/java/org/surveyforge/core/survey/Questionnaire.java 2006-09-29 15:28:51 UTC (rev 73)
@@ -32,20 +32,17 @@
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
-import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.UniqueConstraint;
-import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.IndexColumn;
import org.surveyforge.core.metadata.Register;
import org.surveyforge.util.InternationalizedString;
+
/**
* A questionnaire is a list of {@link Question}s used to recollect the data into a register. The questionnaire is included in almost
* one {@link Study}.
@@ -54,61 +51,38 @@
*/
@Entity
@Table(uniqueConstraints = {@UniqueConstraint(columnNames = {"identifier", "study_id"})})
-public class Questionnaire implements Serializable
+public class Questionnaire extends QuestionnaireElement
{
- private static final long serialVersionUID = 6844066269698434310L;
-
- @SuppressWarnings("unused")
- @Id
- @Column(length = 50)
- @GeneratedValue(generator = "system-uuid")
- @GenericGenerator(name = "system-uuid", strategy = "uuid")
- private String id;
- /** Version for optimistic locking. */
- @SuppressWarnings("unused")
- @javax.persistence.Version
- private int lockingVersion;
-
/**
- * A questionnaire is identified by an identifier, which is unique in the context of a statistical activity. It may typically be an
- * abbreviation of its title or a systematic number.
+ *
*/
- @Column(nullable = false, length = 50)
- private String identifier;
+ private static final long serialVersionUID = -357629851050021121L;
/** A questionnaire has a title as provided by the owner or maintenance unit. */
@Column(length = 250)
- private String title = "";
+ private String title = "";
/**
* Detailed description of the questionnaire. The questionnaire description typically describes the underlying concept of the
* questionnaire and basic principles.
*/
@Column(length = 500)
- private String description = "";
- /** A questionnaire consists of a number of questionnaire elements. Each element refers to a question. */
- @OneToMany(fetch = FetchType.LAZY, cascade = {CascadeType.ALL})
- @IndexColumn(name = "questionnairesIndex")
- @JoinColumn(name = "questionnaire_id")
- private List<QuestionnaireElement> elements = new ArrayList<QuestionnaireElement>( );
+ private String description = "";
+
/** A questionnaire may have its content organized in pages. */
@OneToMany(fetch = FetchType.LAZY, cascade = {CascadeType.ALL})
@IndexColumn(name = "pageIndex")
// @JoinColumn(name = "questionnaire_page_id")
@JoinColumn(name = "questionnaire_page_id")
- private List<Feed> pageFeeds = new ArrayList<Feed>( );
+ private List<Feed> pageFeeds = new ArrayList<Feed>( );
/** A questionnaire may have its content organized in sections. */
@OneToMany(fetch = FetchType.LAZY, cascade = {CascadeType.ALL})
@IndexColumn(name = "sectionIndex")
@JoinColumn(name = "questionnaire_section_id")
- private List<SectionFeed> sectionFeeds = new ArrayList<SectionFeed>( );
+ private List<SectionFeed> sectionFeeds = new ArrayList<SectionFeed>( );
- /** A questionnaire corresponds logically to a register, which describes the content of the data collection. */
- @OneToOne(fetch = FetchType.LAZY)
- private Register register;
-
/** A questionnaire is included in a Study. */
@ManyToOne
@JoinColumn(name = "study_id", insertable = false, updatable = false)
- private Study study;
+ private Study study;
protected Questionnaire( )
@@ -123,38 +97,17 @@
* @throws NullPointerException If the study is <code>null</code> or if the register is <code>null</code> or if the identifier is
* <code>null</code> or is empty.
*/
- public Questionnaire( String identifier, Study study, Register register )
+ public Questionnaire( String identifier, Study study )
{
+ // super( );
this.setIdentifier( identifier );
+ this.registerDataElement = new Register( identifier );
this.setStudy( study );
- this.setRegister( register );
}
- /**
- * Returns the identifier of the Questionnaire.
- *
- * @return Returns the identifier.
- */
- public String getIdentifier( )
- {
- return this.identifier;
- }
+ // }
/**
- * Sets the identifier of the Questionnaire.
- *
- * @param identifier The identifier to set.
- * @throws NullPointerException If the register is <code>null</code> or if the identifier is <code>null</code> or is empty.
- */
- public void setIdentifier( String identifier )
- {
- if( identifier != null && !identifier.equals( "" ) )
- this.identifier = identifier;
- else
- throw new NullPointerException( );
- }
-
- /**
* Returns the title of the questionnaire.
*
* @return Returns the title.
@@ -203,17 +156,6 @@
}
/**
- * Return the list of {@link QuestionnaireElement}s included in this questionnaire.
- *
- * @return Returns the elements.
- */
- public List<QuestionnaireElement> getElements( )
- {
- return Collections.unmodifiableList( this.elements );
- }
-
-
- /**
* Adds a new {@link Element} to he Questionnaire.
*
* @param element The element to add.
@@ -223,7 +165,7 @@
{
if( element != null )
{
- this.elements.add( element );
+ super.addElement( element );
if( this.pageFeeds.isEmpty( ) ) this.createPageFeed( element );
if( this.sectionFeeds.isEmpty( ) ) this.createSectionFeed( element );
}
@@ -241,7 +183,7 @@
{
if( element != null )
{
- int indexToRemove = this.elements.indexOf( element );
+ int indexToRemove = this.getComponentElements( ).indexOf( element );
if( indexToRemove != -1 )
{
Comparator<Feed> feedComparator = new Questionnaire.FeedComparator( );
@@ -252,7 +194,8 @@
if( pageFeedPosition >= 0 )
{
this.pageFeeds.remove( pageFeedPosition );
- if( indexToRemove < this.elements.size( ) - 1 ) this.createPageFeed( this.elements.get( indexToRemove + 1 ) );
+ if( indexToRemove < this.getComponentElements( ).size( ) - 1 )
+ this.createPageFeed( this.getComponentElements( ).get( indexToRemove + 1 ) );
}
SectionFeed sectionFeedToRemove = new SectionFeed( element );
@@ -261,11 +204,12 @@
if( sectionFeedPosition >= 0 )
{
SectionFeed oldSectionFeed = this.sectionFeeds.remove( sectionFeedPosition );
- if( indexToRemove < this.elements.size( ) - 1 )
- this.createSectionFeed( this.elements.get( indexToRemove + 1 ), oldSectionFeed.getInternationalizedTitle( ) );
+ if( indexToRemove < this.getComponentElements( ).size( ) - 1 )
+ this
+ .createSectionFeed( this.getComponentElements( ).get( indexToRemove + 1 ), oldSectionFeed.getInternationalizedTitle( ) );
}
- this.elements.remove( element );
+ this.delElement( element );
}
}
else
@@ -375,21 +319,23 @@
int pageNumber = this.pageFeeds.indexOf( pageFeed );
int sectionNumber = this.sectionFeeds.indexOf( sectionFeed );
- int firstElementIndex = Math.max( this.elements.indexOf( pageFeed.getFirstElement( ) ), this.elements.indexOf( sectionFeed
- .getFirstElement( ) ) );
+ int firstElementIndex = Math.max( this.getComponentElements( ).indexOf( pageFeed.getFirstElement( ) ), this
+ .getComponentElements( ).indexOf( sectionFeed.getFirstElement( ) ) );
- int lastElementInPageIndex = (pageNumber != this.pageFeeds.size( ) - 1) ? this.elements.indexOf( this.pageFeeds.get(
- pageNumber + 1 ).getFirstElement( ) ) : Integer.MAX_VALUE;
- int lastElementInSectionIndex = (sectionNumber != this.sectionFeeds.size( ) - 1) ? this.elements.indexOf( this.sectionFeeds.get(
- sectionNumber + 1 ).getFirstElement( ) ) : Integer.MAX_VALUE;
- int lastElementIndex = Math.min( Math.min( lastElementInPageIndex, lastElementInSectionIndex ), this.elements.size( ) );
+ int lastElementInPageIndex = (pageNumber != this.pageFeeds.size( ) - 1) ? this.getComponentElements( ).indexOf(
+ this.pageFeeds.get( pageNumber + 1 ).getFirstElement( ) ) : Integer.MAX_VALUE;
+ int lastElementInSectionIndex = (sectionNumber != this.sectionFeeds.size( ) - 1) ? this.getComponentElements( ).indexOf(
+ this.sectionFeeds.get( sectionNumber + 1 ).getFirstElement( ) ) : Integer.MAX_VALUE;
+ int lastElementIndex = Math.min( Math.min( lastElementInPageIndex, lastElementInSectionIndex ), this.getComponentElements( )
+ .size( ) );
- return Collections.unmodifiableList( this.elements.subList( firstElementIndex, lastElementIndex ) );
+ return Collections.unmodifiableList( this.getComponentElements( ).subList( firstElementIndex, lastElementIndex ) );
}
else
throw new IllegalArgumentException( );
}
+
/**
* Returns the {@link Register} of the questionnaire.
*
@@ -397,22 +343,9 @@
*/
public Register getRegister( )
{
- return this.register;
+ return (Register) this.getRegisterDataElement( );
}
- /**
- * Sets the register of the Questionnaire.
- *
- * @param register The register to set.
- * @throws NullPointerException If the register is <code>null</code>
- */
- public void setRegister( Register register )
- {
- if( register != null )
- this.register = register;
- else
- throw new NullPointerException( );
- }
/**
* Return the study his questionnaire belongs to.
@@ -461,8 +394,8 @@
public int compare( Feed feed1, Feed feed2 )
{
- Integer firstPosition = Questionnaire.this.getElements( ).indexOf( feed1.getFirstElement( ) );
- Integer secondPosition = Questionnaire.this.getElements( ).indexOf( feed2.getFirstElement( ) );
+ Integer firstPosition = Questionnaire.this.getComponentElements( ).indexOf( feed1.getFirstElement( ) );
+ Integer secondPosition = Questionnaire.this.getComponentElements( ).indexOf( feed2.getFirstElement( ) );
return firstPosition.compareTo( secondPosition );
}
}
Modified: trunk/surveyforge-core/src/main/java/org/surveyforge/core/survey/QuestionnaireElement.java
===================================================================
--- trunk/surveyforge-core/src/main/java/org/surveyforge/core/survey/QuestionnaireElement.java 2006-09-21 13:56:29 UTC (rev 72)
+++ trunk/surveyforge-core/src/main/java/org/surveyforge/core/survey/QuestionnaireElement.java 2006-09-29 15:28:51 UTC (rev 73)
@@ -32,6 +32,8 @@
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
@@ -42,8 +44,9 @@
import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.IndexColumn;
import org.surveyforge.core.metadata.RegisterDataElement;
+import org.surveyforge.core.metadata.domain.AbstractValueDomain;
+import org.surveyforge.core.metadata.domain.StructuredValueDomain;
-
/**
* A questionnaire element is the link between the {@link Question} of the {@link Questionnaire} and the metadata layer represented by
* the {@link RegisterDataElement}.
@@ -51,10 +54,11 @@
* @author jsegura
*/
@Entity
-@Table(uniqueConstraints = {@UniqueConstraint(columnNames = {"identifier", "questionnaire_id"})})
+@Table(uniqueConstraints = {@UniqueConstraint(columnNames = {"identifier", "upperElement_id"})})
+@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public class QuestionnaireElement implements Serializable
{
- private static final long serialVersionUID = -5920656314181190011L;
+ private static final long serialVersionUID = -5920656314181190011L;
@SuppressWarnings("unused")
@@ -68,59 +72,44 @@
@javax.persistence.Version
private int lockingVersion;
- /** A questionnaire element is identified by a unique identifier. */
+ /** A SurveyElement is identified by a unique identifier. */
@Column(unique = true, length = 50)
private String identifier;
+
/** Each questionnaire element has a {@link Question} that has the text and the structure of the question. */
@ManyToOne(fetch = FetchType.LAZY, cascade = {CascadeType.ALL})
- private Question question = null;
+ private Question question = null;
/** A questionnaire element have a {@link RegisterDataElement} to have the info of the data. */
- @OneToOne(fetch = FetchType.LAZY, cascade = {CascadeType.ALL})
- private RegisterDataElement registerDataElement;
+ @OneToOne(cascade = {CascadeType.ALL})
+ protected RegisterDataElement registerDataElement;
/** Default answer if the question is not applicable. */
@Column(length = 50)
- private String defaultNotApplicable = "";
+ private String defaultNotApplicable = "";
/** Default answer if the question is not answered. */
@Column(length = 50)
- private String defaultNotAnswered = "";
- /** This is the question that acts as a frame for a number of sub questions. */
+ private String defaultNotAnswered = "";
+
@ManyToOne
- @JoinColumn(name = "upperQuestionnaireElement_id", insertable = false, updatable = false)
- private QuestionnaireElement upperQuestionnaireElement = null;
- /** A question referring to a complex fact can be divided in a number of sub questions. */
+ @JoinColumn(name = "upperElement_id", insertable = false, updatable = false)
+ private QuestionnaireElement upperElement = null;
+
@OneToMany(fetch = FetchType.LAZY, cascade = {CascadeType.ALL})
- @IndexColumn(name = "subQuestionnaireElementsIndex")
- @JoinColumn(name = "upperQuestionnaireElement_id")
- private List<QuestionnaireElement> subQuestionnaireElements = new ArrayList<QuestionnaireElement>( );
+ @IndexColumn(name = "componentElementsIndex")
+ @JoinColumn(name = "upperElement_id")
+ private List<QuestionnaireElement> componentElements = new ArrayList<QuestionnaireElement>( );
protected QuestionnaireElement( )
{}
- /**
- * Creates a new instance of a QuestionnaireElement linked to the registerDataElement and identified by identifier.
- *
- * @param registerDataElement The {@link RegisterDataElement} the questionnaire element is linked to.
- * @param identifier The identifier of the questionnaire element.
- * @throws NullPointerException If the registerDataElement or the identifier are <code>null</code> and if the identifier is empty.
- */
- public QuestionnaireElement( RegisterDataElement registerDataElement )
+ public QuestionnaireElement( String identifier, AbstractValueDomain valueDomain )
{
- this.setRegisterDataElement( registerDataElement );
- this.setIdentifier( registerDataElement.getIdentifier( ) );
+ this.setIdentifier( identifier );
+ this.registerDataElement = new RegisterDataElement( identifier, valueDomain );
}
- public QuestionnaireElement( RegisterDataElement registerDataElement, QuestionnaireElement upperElement )
- {
- this( registerDataElement );
- this.setUpperQuestionnaireElement( upperElement );
- }
-
-
- /**
- * Returns the identifier of the questionnaire element.
- *
- * @return Returns the identifier.
+ /*
+ * Returns the identifier of the SurveyElement. @return Returns the identifier.
*/
public String getIdentifier( )
{
@@ -128,12 +117,12 @@
}
/**
- * Sets a new identifier for the questionnaire element.
+ * Sets the identifier of the SurveyElement.
*
* @param identifier The identifier to set.
- * @throws NullPointerException If the identifier is <code>null</code> and if the identifier is empty.
+ * @throws NullPointerException If the register is <code>null</code> or if the identifier is <code>null</code> or is empty.
*/
- protected void setIdentifier( String identifier )
+ public void setIdentifier( String identifier )
{
if( identifier != null && !identifier.equals( "" ) )
this.identifier = identifier;
@@ -162,7 +151,7 @@
}
/**
- * Return the {@link RegisterDataElement} this questionnaire element is linked to.
+ * / * Return the {@link RegisterDataElement} this questionnaire element is linked to.
*
* @return Returns the registerDataElement.
*/
@@ -172,29 +161,6 @@
}
/**
- * Sets a the new {@link RegisterDataElement} this questionnaire element is linked to.
- *
- * @param registerDataElement The registerDataElement to set.
- * @throws If the registerDataElement is <code>null</code>;
- */
- protected void setRegisterDataElement( RegisterDataElement registerDataElement )
- {
- if( registerDataElement != null )
- {
- // TODO remove old elements
- this.registerDataElement = registerDataElement;
- registerDataElement.setQuestionnaireElement( this );
- for( int i = 0; i < registerDataElement.getComponentElements( ).size( ); i++ )
- {
- this.addSubQuestionnaireElement( new QuestionnaireElement( (RegisterDataElement) (registerDataElement.getComponentElements( )
- .get( i )) ) );
- }
- }
- else
- throw new NullPointerException( );
- }
-
- /**
* Returns the default answer for not applicable questions.
*
* @return Returns the default answer for not applicable questions.
@@ -242,43 +208,91 @@
throw new NullPointerException( );
}
-
- public QuestionnaireElement getUpperQuestionnaireElement( )
+ protected void setUpperElement( QuestionnaireElement upperElement )
{
- return this.upperQuestionnaireElement;
+ if( this.getUpperElement( ) != null ) this.getUpperElement( ).removeElement( this );
+ this.upperElement = upperElement;
+ if( this.getUpperElement( ) != null ) this.getUpperElement( ).addElement( this );
}
- public void setUpperQuestionnaireElement( QuestionnaireElement upperQuestionnaireElement )
+ public QuestionnaireElement getUpperElement( )
{
- if( this.upperQuestionnaireElement != null ) this.upperQuestionnaireElement.removeSubQuestionnaireElement( this );
- this.upperQuestionnaireElement = upperQuestionnaireElement;
- if( this.upperQuestionnaireElement != null ) this.upperQuestionnaireElement.addSubQuestionnaireElement( this );
+ return this.upperElement;
}
- private void removeSubQuestionnaireElement( QuestionnaireElement subQuestionnaireElement )
+ public List<QuestionnaireElement> getComponentElements( )
{
- if( subQuestionnaireElement != null )
- this.subQuestionnaireElements.remove( subQuestionnaireElement );
+ return Collections.unmodifiableList( this.componentElements );
+ }
+
+ /**
+ * @param componentElements The componentElements to set.
+ */
+ public void addComponentElement( QuestionnaireElement componentElement )
+ {
+ if( componentElement != null )
+ {
+ if( !this.getComponentElements( ).contains( componentElement )
+ && this.getRegisterDataElement( ).getValueDomain( ) instanceof StructuredValueDomain )
+ {
+ componentElement.setUpperElement( this );
+ // ((StructuredValueDomain) this.getValueDomain( )).addSubDomain( componentElement.getValueDomain( ) );
+ }
+ else
+ throw new IllegalArgumentException( );
+ }
else
throw new NullPointerException( );
}
- public List<QuestionnaireElement> getSubQuestionnaireElementss( )
+
+ /**
+ * @param componentElement
+ */
+ protected void addElement( QuestionnaireElement componentElement )
{
- return Collections.unmodifiableList( this.subQuestionnaireElements );
+ if( componentElement == null ) throw new NullPointerException( );
+ if( this.getRegisterDataElement( ).getValueDomain( ) instanceof StructuredValueDomain )
+ {
+ this.componentElements.add( componentElement );
+ componentElement.upperElement = this;
+ this.getRegisterDataElement( ).addComponentElement( componentElement.getRegisterDataElement( ) );
+ }
+ else
+ throw new IllegalArgumentException( );
}
-
- private void addSubQuestionnaireElement( QuestionnaireElement subQuestionnaireElement )
+ /**
+ * @param componentElements The componentElements to set.
+ */
+ public void removeComponentElement( QuestionnaireElement componentElement )
{
- if( subQuestionnaireElement != null )
- this.subQuestionnaireElements.add( subQuestionnaireElement );
+ if( componentElement != null )
+ {
+ componentElement.setUpperElement( null );
+ }
else
throw new NullPointerException( );
}
+ /**
+ * @param componentElement
+ */
+ protected void removeElement( QuestionnaireElement componentElement )
+ {
+ if( componentElement == null ) throw new NullPointerException( );
+ if( this.getRegisterDataElement( ).getValueDomain( ) instanceof StructuredValueDomain )
+ {
+ this.componentElements.remove( componentElement );
+ componentElement.upperElement = null;
+ this.getRegisterDataElement( ).removeComponentElement( componentElement.getRegisterDataElement( ) );
+ }
+ else
+ throw new IllegalArgumentException( );
+ }
+
// TODO : Equals+hashcode
// @Override
// public boolean equals( Object object )
@@ -293,5 +307,4 @@
// {
// return this.getStudy( ).hashCode( ) ^ this.getIdentifier( ).hashCode( );
// }
-
}
Modified: trunk/surveyforge-core/src/test/java/org/surveyforge/core/metadata/DataElementTest.java
===================================================================
--- trunk/surveyforge-core/src/test/java/org/surveyforge/core/metadata/DataElementTest.java 2006-09-21 13:56:29 UTC (rev 72)
+++ trunk/surveyforge-core/src/test/java/org/surveyforge/core/metadata/DataElementTest.java 2006-09-29 15:28:51 UTC (rev 73)
@@ -66,8 +66,7 @@
public void RegisterDataElementCreationWithNullIdentifier( )
{
LogicalValueDomain lvd = new LogicalValueDomain( );
- RegisterDataElement rde = new RegisterDataElement( null, lvd );
-
+ new RegisterDataElement( null, lvd );
}
@Test
@@ -75,9 +74,6 @@
public void RegisterCreationWithNullDomain( )
{
LogicalValueDomain lvd = null;
- RegisterDataElement rde = new RegisterDataElement( "id", lvd );
-
+ new RegisterDataElement( "id", lvd );
}
-
-
}
Modified: trunk/surveyforge-core/src/test/java/org/surveyforge/core/metadata/RegisterTest.java
===================================================================
--- trunk/surveyforge-core/src/test/java/org/surveyforge/core/metadata/RegisterTest.java 2006-09-21 13:56:29 UTC (rev 72)
+++ trunk/surveyforge-core/src/test/java/org/surveyforge/core/metadata/RegisterTest.java 2006-09-29 15:28:51 UTC (rev 73)
@@ -27,14 +27,14 @@
@ExpectedExceptions( {NullPointerException.class})
public void RegisterCreationWithNullIdentifier( )
{
- Register register = new Register( null );
+ new Register( null );
}
@Test
@ExpectedExceptions( {NullPointerException.class})
public void RegisterCreationWithEmptyIdentifier( )
{
- Register register = new Register( "" );
+ new Register( "" );
}
Modified: trunk/surveyforge-core/src/test/java/org/surveyforge/core/survey/QuestionnaireElementTest.java
===================================================================
--- trunk/surveyforge-core/src/test/java/org/surveyforge/core/survey/QuestionnaireElementTest.java 2006-09-21 13:56:29 UTC (rev 72)
+++ trunk/surveyforge-core/src/test/java/org/surveyforge/core/survey/QuestionnaireElementTest.java 2006-09-29 15:28:51 UTC (rev 73)
@@ -29,7 +29,10 @@
import org.surveyforge.core.metadata.RegisterDataElement;
import org.surveyforge.core.metadata.StatisticalObjectType;
import org.surveyforge.core.metadata.domain.LogicalValueDomain;
+import org.surveyforge.core.metadata.domain.StructuredValueDomain;
+import org.testng.Assert;
import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
/**
* @author jsegura
@@ -47,4 +50,27 @@
RegisterDataElement registerDataElement = new RegisterDataElement( "registerDataElement", conceptualDataElement );
return new Object[][] {new Object[] {registerDataElement}};
}
+
+ @Test
+ public void Test( )
+ {
+
+
+ QuestionnaireElement upperQE = new QuestionnaireElement( "upperQE", new StructuredValueDomain( ) );
+ QuestionnaireElement q1 = new QuestionnaireElement( "qe1", new LogicalValueDomain( ) );
+ QuestionnaireElement q2 = new QuestionnaireElement( "qe2", new LogicalValueDomain( ) );
+ QuestionnaireElement q3 = new QuestionnaireElement( "qe3", new LogicalValueDomain( ) );
+ QuestionnaireElement q4 = new QuestionnaireElement( "qe4", new LogicalValueDomain( ) );
+ QuestionnaireElement q5 = new QuestionnaireElement( "qe5", new LogicalValueDomain( ) );
+ upperQE.addComponentElement( q1 );
+ upperQE.addComponentElement( q2 );
+ upperQE.addComponentElement( q3 );
+ upperQE.addComponentElement( q4 );
+ upperQE.addComponentElement( q5 );
+ Assert.assertEquals( 5, upperQE.getComponentElements( ).size( ) );
+ Assert.assertEquals( 5, upperQE.getRegisterDataElement( ).getComponentElements( ).size( ) );
+ Assert.assertEquals( 5, upperQE.getRegisterDataElement( ).getValueDomain( ).getSubDomains( ).size( ) );
+
+
+ }
}
Modified: trunk/surveyforge-core/src/test/java/org/surveyforge/core/survey/QuestionnaireTest.java
===================================================================
--- trunk/surveyforge-core/src/test/java/org/surveyforge/core/survey/QuestionnaireTest.java 2006-09-21 13:56:29 UTC (rev 72)
+++ trunk/surveyforge-core/src/test/java/org/surveyforge/core/survey/QuestionnaireTest.java 2006-09-29 15:28:51 UTC (rev 73)
@@ -21,7 +21,6 @@
*/
package org.surveyforge.core.survey;
-import org.surveyforge.core.metadata.Register;
import org.testng.Assert;
import org.testng.annotations.ExpectedExceptions;
import org.testng.annotations.Test;
@@ -35,35 +34,28 @@
@ExpectedExceptions( {NullPointerException.class})
public void questionnaireCreationWithNullIdentifier( )
{
- new Questionnaire( null, new Study( "id" ), new Register( "id" ) );
+ new Questionnaire( null, new Study( "id" ) );
}
@Test
@ExpectedExceptions( {NullPointerException.class})
public void questionnaireCreationWithEmptyIdentifier( )
{
- new Questionnaire( "", new Study( "id" ), new Register( "id" ) );
+ new Questionnaire( "", new Study( "id" ) );
}
@Test
@ExpectedExceptions( {NullPointerException.class})
public void questionnaireCreationWithNullStudy( )
{
- new Questionnaire( "id", null, new Register( "id" ) );
+ new Questionnaire( "id", null );
}
@Test
- @ExpectedExceptions( {NullPointerException.class})
- public void questionnaireCreationWithNullRegister( )
- {
- new Questionnaire( "id", new Study( "id" ), null );
- }
-
- @Test
public void questionnaireGetIdentifier( )
{
String id = "id";
- Questionnaire questionnaire = new Questionnaire( id, new Study( "id" ), new Register( "id" ) );
+ Questionnaire questionnaire = new Questionnaire( id, new Study( "id" ) );
Assert.assertEquals( questionnaire.getIdentifier( ), id );
}
@@ -72,14 +64,14 @@
public void questionnaireSetNullTitle( )
{
- new Questionnaire( "id", new Study( "id" ), new Register( "id" ) ).setTitle( null );
+ new Questionnaire( "id", new Study( "id" ) ).setTitle( null );
}
@Test
public void questionnaireGetTitle( )
{
- Questionnaire questionnaire = new Questionnaire( "id", new Study( "id" ), new Register( "id" ) );
+ Questionnaire questionnaire = new Questionnaire( "id", new Study( "id" ) );
questionnaire.setTitle( "title" );
Assert.assertEquals( questionnaire.getTitle( ), "title" );
}
@@ -88,7 +80,7 @@
@ExpectedExceptions( {NullPointerException.class})
public void questionnaireSetNullDescription( )
{
- new Questionnaire( "id", new Study( "id" ), new Register( "id" ) ).setDescription( null );
+ new Questionnaire( "id", new Study( "id" ) ).setDescription( null );
}
@Test
@@ -96,7 +88,7 @@
{
String empty = "";
String desc = "desc";
- Questionnaire obj = new Questionnaire( "id", new Study( "id" ), new Register( "id" ) );
+ Questionnaire obj = new Questionnaire( "id", new Study( "id" ) );
obj.setDescription( desc );
Assert.assertTrue( obj.getDescription( ).equals( desc ) );
Assert.assertFalse( obj.getDescription( ).equals( "test" ) );
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|