//Observation Class with a few pertinent methods
public class Observation {
private java.util.Date recordedDate;
private java.util.Date observedDate;
private int duration;
private ObservationType type;
private String observationTypeName;
public boolean isValid (String
obsValue) {
return getType().isValid(
obsValue );
} end isValid
} // end Observation Class
// Observation Type with pertinent methods
public class ObservationType {
private String phenomenon;
private Validator dataElementValidator
= null;
private String phenomenonType;
public ObservationType(String
ddElementName) {
DataDictionaryRecord
ddrecord = DDManager.getMember(dElementName );
setPhenomenon( ddElementName
);
setPhenomenonType(
ddrecord.getDataElementType());
try {
// This uses the validator
name stored in the data dictionary to //
build an instance of the needed validator
(either a Range
// or Discrete Validator)
using the Reflection pattern.
Class validatorClass =
Class.forName("fowlerspatterns."+ddrecord.getValidatorName()
);
setDataElementValidator
( (Validator)
validatorClass.newInstance());
getDataElementValidator().setDDRecord(
ddrecord);
} catch(Exception
e) { e.printStackTrace(); }
} // end ObservationType constructor
public boolean isValid(String
obsValue) {
return getDataElementValidator().isValid(obsValue );
} // end isValid
} // end Observation Type
// Observation Panel
public class ObservationPanel extends java.awt.Panel
implements java.awt.event.ActionListener
{
protected transient
java.beans.PropertyChangeSupport propertyChange;
private String fieldDataDictionaryElementName
= new String();
private java.awt.Label
ivjObservationLabel = null;
private java.awt.TextField
ivjObservationTextField = null;
private Observation dataElementObservation
= null;
private java.awt.Label
ivjErrorLabel = null;
private boolean observationValid
= true;
private String panelObservation;
private String panelObservationText;
private String errorText;
public ObservationPanel()
{
super();
initialize();
} // end ObservationPanel
constructor
public static void main(java.lang.String[]
args) {
try { java.awt.Frame
frame;
try {
Class aFrameClass =
Class.forName("com.ibm.uvm.abt.edit.TestFrame");
frame = (java.awt.Frame)aFrameClass.newInstance();
} catch (java.lang.Throwable ivjExc)
{frame = new java.awt.Frame();}
ObservationPanel aObservationPanel;
aObservationPanel = new ObservationPanel();
frame.add("Center", aObservationPanel);
frame.setSize(aObservationPanel.getSize());
frame.setVisible(true);
} catch (Throwable exception)
{
System.err.println("Exception occurred in main Panel");
exception.printStackTrace(System.out);
}
}// end main
public void actionPerformed(java.awt.event.ActionEvent
e) {
if ((e.getSource() ==
getObservationTextField()) ) {
validateThisObservation(e);
}
} // end actionPerformed
private void validateThisObservation
(java.awt.event.ActionEvent arg1) {
try {this.validateObservation();}
catch (java.lang.Throwable
ivjExc) {handleException(ivjExc);}
} // end validateThisObservation
private java.awt.Label
getErrorLabel() {
if (ivjErrorLabel == null)
{
try {
ivjErrorLabel = new java.awt.Label();
ivjErrorLabel.setName("ErrorLabel");
ivjErrorLabel.setText("");
ivjErrorLabel.setBounds(45, 61, 269, 23);
} catch (java.lang.Throwable ivjExc)
{handleException(ivjExc);}
}; // end if
return ivjErrorLabel;
} // end getErrorLabel
private java.awt.Label
getObservationLabel() {
if (ivjObservationLabel
== null) {
try {
ivjObservationLabel = new java.awt.Label();
ivjObservationLabel.setName("ObservationLabel");
ivjObservationLabel.setText("
");
ivjObservationLabel.setBackground(java.awt.Color.cyan);
ivjObservationLabel.setBounds(36, 29, 66, 23);
} catch (java.lang.Throwable ivjExc)
{handleException(ivjExc);}
}; // end if
return ivjObservationLabel;
} // end getObservationLabel
private java.awt.TextField
getObservationTextField() {
if (ivjObservationTextField
== null) {
try {
ivjObservationTextField = new java.awt.TextField();
ivjObservationTextField.setName
("ObservationTextField");
ivjObservationTextField.setBounds(108, 29, 188, 23);
} catch (java.lang.Throwable ivjExc)
{handleException(ivjExc);)
}; // end if
return ivjObservationTextField;
}// end getObservationTextField
protected java.beans.PropertyChangeSupport
getPropertyChange() {
if (propertyChange ==
null) {
propertyChange = new
java.beans.PropertyChangeSupport(this);
}; // end if
return propertyChange;
} // end PropertyChangeSupport
private void initialize()
{
setName("ObservationPanel");
setLayout(null); setSize(375, 88);
add(getObservationTextField(),
getObservationTextField().getName());
add(getObservationLabel(),
getObservationLabel().getName());
add(getErrorLabel(), getErrorLabel().getName());
initConnections();
DataDictionaryRecord ddrecord
=
DDManager.getMember(getDataDictionaryElementName());
getObservationLabel().setText(
ddrecord.getLabelName() );
setErrorText( ddrecord.getInvalidObservationLabel()
);
// The label size, textfield
size, and panel size should
// be adjusted using the
length of the label from the
// data dictionary.
setDataElementObservation( new Observation(
getDataDictionaryElementName() ) );
} // end initialize
public void setDataDictionaryElementName
(String dataDictionaryElementName) {
String oldValue = fieldDataDictionaryElementName;
fieldDataDictionaryElementName
= dataDictionaryElementName;
firePropertyChange
("dataDictionaryElementName", oldValue,
dataDictionaryElementName);
} // end setDataDictionaryElementName
public void validateObservation()
{
/* Perform the validateObservation
method. */
getErrorLabel().setText("");
setObservationValid(true);
setPanelObservationText(
getObservationTextField().getText() );
setObservationValid
(getDataElementObservation().isValid
(getPanelObservationText()));
if( !getObservationValid() ) {
getErrorLabel().setText(getErrorText());
} // end if
} // end validateObservation
}end Observation Panel class
// DataDictionary Record class an item in
DD Vector
public class DataDictionaryRecord {
private String dataElementName;
private Validator dataElementValidator;
private String min;
private String max;
private String tableName;
private java.util.Vector
tableVector;
private String validatorName;
private int length;
private String labelName
= new String();
private String dataElementType;
private String invalidObservationLabel;
} // end DDRecord class
Listing 2
// validator class
public class Validator {
protected DataDictionaryRecord
dDRecord;
public boolean isValid(String
obs ) { return false;} // end isValid
} // end validator class
// RangeValidator Class
public class RangeValidator extends Validator
{
public boolean isValid(String
obs ) {
int obsInt;
if(getDDRecord().getDataElementType().equals("integer"))
{
// validate
that obs is an integer
// ….
try
{obsInt = Integer.parseInt( obs );}
catch(NumberFormatException
e) {return false;}
// validate
that obs meets the rules of min and max
int
maxInt = Integer.parseInt(getDDRecord().getMax());
int
minInt = Integer.parseInt(getDDRecord().getMin());
return
(((minInt <= obsInt )&&(maxInt>=obsInt)));
} // end if
return false;
} // end isValid
} // end rangevalidator