<?xml version="1.0" encoding="UTF-8"?>
               
<project>   
  <name>bookstore</name>
  <topLevelDomainName>com</topLevelDomainName>
  <domainName>jdonohue</domainName>
  <packageName>bookstore</packageName>

  <!-- never point this at the production database, if instructed to the ant build.xml will drop tables -->
  <dbUrl>jdbc:oracle:thin:@localhost:1521:jddb</dbUrl>
  <dbUserName>scott</dbUserName>
  <dbPassword>tiger</dbPassword>

  <displayName>BookStore</displayName>

  <!-- Where should we move WAR files to -->  
  <deployDirectory>C:\bea\user_projects\domains\mydomain\applications</deployDirectory>

  <!-- Where is weblogic.jar with the javax.servlet.* packages, default to one in Weblogic 8.1 -->
  <additionalJarFiles>C:\bea\weblogic81\server\lib</additionalJarFiles>
  <!-- Where is the Oracle jdbc driver jar file, default to the one built into Weblogic 8.1 -->
  <jdbcDriverDirectory>C:\bea\weblogic81\server\ext\jdbc\oracle\920</jdbcDriverDirectory>
                
  <!-- list your objects in the order that their database tables should be created -->
  <!-- for example if the Title table has foriegn key references to Author, then list  -->
  <!-- Author first and then Title --> 
	<object>
	  <className>Author</className>
	  <tableName>author</tableName>
	  <sequenceName>author_seq</sequenceName>
  
	  <property>     
	    <name>authorId</name>
	    <isPrimaryKey/>
	    <columnType>number(10)</columnType>
	    <columnName>author_id</columnName> 
	    <javaDataType>long</javaDataType>
	    <treatAs>long</treatAs>
	  </property> 

	  <property> 
	    <name>firstName</name>
	    <columnName>first_name</columnName>
	    <columnType>varchar2(20)</columnType>
	    <javaDataType>String</javaDataType>
	    <treatAs>String</treatAs>
	    <label>First Name</label>
	    <length>20</length>
      <promptValidation errorWhen="notMatch" javaScriptValidation="yes" servletValidation="yes">
        <message>Invalid first name. No numbers or special characters allowed.</message>
        <regExp>^[A-Za-z]{1,100}$</regExp>
      </promptValidation>
      <promptValidation errorWhen="match" javaScriptValidation="yes" servletValidation="yes">
        <message>First Name can't be blank</message>
        <regExp>^ *$</regExp>
      </promptValidation>
      <testData>John</testData>
      <testDataUpdated>Jane</testDataUpdated>
	  </property>

	  <property>
	    <name>lastName</name>
	    <columnName>last_name</columnName>
	    <columnType>varchar2(30)</columnType>   
	    <javaDataType>String</javaDataType>     
	    <treatAs>String</treatAs>
	    <label>Last Name</label>
	    <length>30</length>
	    <isObjectDisplayProperty/>
      <promptValidation errorWhen="notMatch" javaScriptValidation="yes" servletValidation="yes">
        <message>Invalid last name. No numbers or special characters allowed.</message>
        <regExp>^[A-Za-z]{1,100}$</regExp>
      </promptValidation>
      <promptValidation errorWhen="match" javaScriptValidation="yes" servletValidation="yes">
        <message>Last Name can't be blank</message>
        <regExp>^ *$</regExp>
      </promptValidation>
      <testData>Smith</testData>
      <testDataUpdated>Doe</testDataUpdated>
	  </property>
	</object>
 
	<object>
	  <className>Obituary</className>
	  <tableName>obituary</tableName>

	  <property>
	    <name>birthDate</name>
	    <columnName>birth_date</columnName>
	    <columnType>date</columnType>
	    <javaDataType>GregorianCalendar</javaDataType>
	    <treatAs>GregorianCalendar</treatAs>
	    <label>Date of Birth</label>
	    <formatString>dd-MMM-yyyy</formatString>
      <testData>new GregorianCalendar(1930, 01, 15)</testData>
      <testDataUpdated>new GregorianCalendar(2004, 11, 25)</testDataUpdated>
	  </property>

	  <property>
	    <name>deceasedDate</name>
	    <columnName>deceased_date</columnName>
	    <columnType>date</columnType>
	    <javaDataType>GregorianCalendar</javaDataType>
	    <treatAs>GregorianCalendar</treatAs>
	    <label>Deceased Date</label>
      <testData>new GregorianCalendar(2003, 02, 25)</testData>
      <testDataUpdated>new GregorianCalendar(2004, 02, 26)</testDataUpdated>
	  </property>

	  <property>
	    <name>obituaryText</name>
	    <columnName>obituary_text</columnName>
	    <javaDataType>String</javaDataType>
	    <treatAs>Clob</treatAs>
	    <columnType>Clob</columnType>
	    <label>Obituary Text</label>
      <testData>This is the obituary text.</testData>
      <testDataUpdated>This is the updated obituary text.</testDataUpdated>
	    <length>10000</length>
	  </property>
	</object>


	<object>
	  <className>Publisher</className>
	  <tableName>publisher</tableName>
	  <sequenceName>publisher_seq</sequenceName>

	  <property>
	    <name>publisherId</name>
	    <isPrimaryKey/>
	    <columnName>publisher_id</columnName>
	    <columnType>number(10)</columnType>
	    <javaDataType>long</javaDataType>
	    <treatAs>long</treatAs>
	  </property>

	  <property>
	    <name>name</name>
	    <columnName>name</columnName>
	    <columnType>varchar2(100)</columnType>
	    <javaDataType>String</javaDataType>
	    <treatAs>String</treatAs>
	    <label>Publisher Name</label>
      <testData>Simon and Schuster</testData>
      <testDataUpdated>McMillan</testDataUpdated>
	    <length>100</length>
	    <isObjectDisplayProperty/>
	  </property>

	  <property>
	    <name>salesContact</name>
	    <columnName>sales_contact</columnName>
	    <columnType>varchar2(100)</columnType>
	    <javaDataType>String</javaDataType>
	    <label>Sales Contact</label>
	    <treatAs>String</treatAs>
      <testData>Steve Smith</testData>
      <testDataUpdated>Sally Smith</testDataUpdated>
	    <length>100</length>
	  </property>

	</object>

	<object>
	  <className>Category</className>
	  <tableName>category</tableName>
	  <sequenceName>category_seq</sequenceName>

	  <property>
	    <name>categoryId</name>
	    <isPrimaryKey/>
	    <columnName>category_id</columnName>
	    <columnType>number(10)</columnType>
	    <javaDataType>long</javaDataType>
	    <treatAs>long</treatAs> 
	  </property>
 
	  <property>
	    <name>description</name>
	    <columnName>description</columnName>
	    <columnType>varchar2(100)</columnType>
	    <javaDataType>String</javaDataType>
	    <treatAs>String</treatAs>
	    <label>Category Name</label>
      <testData>Science Fiction</testData>
      <testDataUpdated>Western</testDataUpdated>
	    <length>100</length>
	    <isObjectDisplayProperty/>
	  </property>

	</object>

	<object>
	  <className>Title</className>
	  <tableName>title</tableName>
	  <sequenceName>title_seq</sequenceName>
  
	  <property>
	    <name>titleId</name>
	    <isPrimaryKey/>
	    <columnName>title_id</columnName>
	    <columnType>number(10)</columnType>
	    <javaDataType>long</javaDataType>
	    <treatAs>long</treatAs>
	  </property>

	  <property>
	    <name>name</name>
	    <columnName>name</columnName>
	    <columnType>varchar2(100)</columnType>
	    <javaDataType>String</javaDataType>
	    <treatAs>String</treatAs>
	    <label>Title Name</label>
      <testData>Spelling for Dummys</testData>
      <testDataUpdated>Spelling for Dummies</testDataUpdated>
	    <length>100</length>
	    <isObjectDisplayProperty/>
	  </property>

	  <!-- we dont include author_id, publisher_id, category_id, columns since they are implied by the  
	       oneToManyDependents relation Title has with those classes                                    -->
	</object>




	<object>
	  <className>Sale</className>
 	  <tableName>sale</tableName>
	  <sequenceName>sale_seq</sequenceName>

	  <property>
	    <name>saleId</name>
	    <isPrimaryKey/>
	    <columnName>sale_id</columnName>
	    <columnType>number(10)</columnType>
	    <javaDataType>long</javaDataType>
	    <treatAs>long</treatAs>
	  </property>

	  <property>
	    <name>name</name>
	    <columnName>name</columnName>
	    <columnType>varchar2(100)</columnType>
	    <javaDataType>String</javaDataType>
	    <treatAs>String</treatAs>
	    <label>Name of Sale</label>
      <testData>Summer Sale</testData>
      <testDataUpdated>Fall Special Sale</testDataUpdated>
	    <length>100</length>
	    <isObjectDisplayProperty/>
	  </property>

	  <property>
	    <name>startDate</name>
	    <columnName>start_date</columnName>
	    <columnType>date</columnType>
	    <javaDataType>GregorianCalendar</javaDataType>
	    <label>Start Date</label>
	    <formatString>dd-MMM-yyyy</formatString>
	    <treatAs>GregorianCalendar</treatAs>
      <testData>new GregorianCalendar(2003, 01, 15)</testData>
      <testDataUpdated>new GregorianCalendar(2004, 02, 25)</testDataUpdated>
	  </property>

	  <property>
	    <name>endDate</name>
	    <columnName>end_date</columnName>
	    <columnType>date</columnType>
	    <javaDataType>GregorianCalendar</javaDataType>
	    <treatAs>GregorianCalendar</treatAs>
	    <label>End Date</label>
	    <formatString>dd-MMM-yyyy</formatString>
      <testData>new GregorianCalendar(2003, 01, 15)</testData>
      <testDataUpdated>new GregorianCalendar(2004, 02, 25)</testDataUpdated>
	  </property>
 
	  <property>
	    <name>discount</name>
	    <columnName>discount</columnName>
	    <columnType>number</columnType>
	    <javaDataType>double</javaDataType>
	    <label>Discount Percent</label>
      <testData>.10</testData>
      <testDataUpdated>.20</testDataUpdated>
	    <treatAs>double</treatAs>  
	  </property>

	  <!-- include in the Sales class a method to getAllTitles() -->
	  <thisToManyIndependent>
	    <className>Title</className>
	    <firstInXrefTableName/>  <!-- sale and title tables have a mutual thisToManyIndependent
	    relationship, we only need one xref table for both, this tag tells us which table name comes
	     first in the xref table name --> 
	  </thisToManyIndependent>

	</object>


  <!-- Now we define the relations between the tables -->

  <!-- a Author has a oneToOneDependent relation with obituary -->
	<relation>
	  <type>oneToOneDependent</type>
	  <left>Author</left>
	  <right>Obituary</right>
	</relation>
   <!--  Author, Publisher, and Category have a oneToManyDependents relation  with Title -->
   <relation>
     <type>oneToManyDependents</type>
     <left>Author</left>
     <right>Title</right>
   </relation>
   <relation>
     <type>oneToManyDependents</type>
     <left>Publisher</left>
     <right>Title</right>
   </relation>
   <relation>
     <type>oneToManyDependents</type>
     <left>Category</left>
     <right>Title</right>
   </relation>

   <!--  Sale and Title have a many to many relation -->
   <relation>
     <type>manyToMany</type>
     <left>Sale</left>
     <right>Title</right>
 	   <xrefTableName>sale_title_xref</xrefTableName> 
   </relation>  
        
</project>    
   

  

