#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
# 
#     https://www.apache.org/licenses/LICENSE-2.0
# 
# Unless required by applicable law or agreed to in writing, software 
# distributed under the License is distributed on an "AS IS" BASIS, 
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
# See the License for the specific language governing permissions and 
# limitations under the License.
#

# Classnames can have the following attributes: 
#          jdo:{persistent|transactional} 
#          super: <classname> 
#          oid: <classname> 
#          access: {public|protected|package|private} 
# Fieldnames can have the following attributes: 
#          type:<type> 
#          access: {public|protected|package|private} 
#          jdo:{persistent|transactional|transient} 
#          annotation:{key|dfg|mediated} 

org.apache.jdo.tck.pc.company.Address=jdo:persistent,oid:org.apache.jdo.tck.pc.company.Address$Oid
org.apache.jdo.tck.pc.company.Address#addrid=jdo:persistent,annotation:key
org.apache.jdo.tck.pc.company.Address#city=jdo:persistent,annotation:dfg
org.apache.jdo.tck.pc.company.Address#state=jdo:persistent,annotation:dfg
org.apache.jdo.tck.pc.company.Address#street=jdo:persistent,annotation:dfg
org.apache.jdo.tck.pc.company.Address#zipcode=jdo:persistent,annotation:dfg
org.apache.jdo.tck.pc.company.Address#country=jdo:persistent,annotation:dfg

org.apache.jdo.tck.pc.company.Company=jdo:persistent,oid:org.apache.jdo.tck.pc.company.Company$Oid
org.apache.jdo.tck.pc.company.Company#address=jdo:persistent,annotation:mediated
org.apache.jdo.tck.pc.company.Company#companyid=jdo:persistent,annotation:key
org.apache.jdo.tck.pc.company.Company#departments=jdo:persistent,annotation:mediated
org.apache.jdo.tck.pc.company.Company#founded=jdo:persistent,annotation:dfg
org.apache.jdo.tck.pc.company.Company#name=jdo:persistent,annotation:dfg

org.apache.jdo.tck.pc.company.DentalInsurance=jdo:persistent,super:org.apache.jdo.tck.pc.company.Insurance
org.apache.jdo.tck.pc.company.DentalInsurance#lifetimeOrthoBenefit=jdo:persistent,annotation:dfg

org.apache.jdo.tck.pc.company.Department=jdo:persistent,oid:org.apache.jdo.tck.pc.company.Department$Oid
org.apache.jdo.tck.pc.company.Department#deptid=jdo:persistent,annotation:key
org.apache.jdo.tck.pc.company.Department#name=jdo:persistent,annotation:dfg
org.apache.jdo.tck.pc.company.Department#employees=jdo:persistent,annotation:mediated
org.apache.jdo.tck.pc.company.Department#fundedEmps=jdo:persistent,annotation:mediated
org.apache.jdo.tck.pc.company.Department#company=jdo:persistent,annotation:mediated
org.apache.jdo.tck.pc.company.Department#employeeOfTheMonth=jdo:persistent,annotation:mediated

org.apache.jdo.tck.pc.company.Employee=jdo:persistent,super:org.apache.jdo.tck.pc.company.Person
org.apache.jdo.tck.pc.company.Employee#dentalInsurance=jdo:persistent,annotation:mediated
org.apache.jdo.tck.pc.company.Employee#department=jdo:persistent,annotation:mediated
org.apache.jdo.tck.pc.company.Employee#fundingDept=jdo:persistent,annotation:mediated
org.apache.jdo.tck.pc.company.Employee#hiredate=jdo:persistent,annotation:dfg
org.apache.jdo.tck.pc.company.Employee#hradvisees=jdo:persistent,annotation:mediated
org.apache.jdo.tck.pc.company.Employee#hradvisor=jdo:persistent,annotation:mediated
org.apache.jdo.tck.pc.company.Employee#manager=jdo:persistent,annotation:mediated
org.apache.jdo.tck.pc.company.Employee#medicalInsurance=jdo:persistent,annotation:mediated
org.apache.jdo.tck.pc.company.Employee#mentor=jdo:persistent,annotation:mediated
org.apache.jdo.tck.pc.company.Employee#projects=jdo:persistent,annotation:mediated
org.apache.jdo.tck.pc.company.Employee#protege=jdo:persistent,annotation:mediated
org.apache.jdo.tck.pc.company.Employee#reviewedProjects=jdo:persistent,annotation:mediated
org.apache.jdo.tck.pc.company.Employee#team=jdo:persistent,annotation:mediated
org.apache.jdo.tck.pc.company.Employee#weeklyhours=jdo:persistent,annotation:dfg

org.apache.jdo.tck.pc.company.FullTimeEmployee=jdo:persistent,super:org.apache.jdo.tck.pc.company.Employee
org.apache.jdo.tck.pc.company.FullTimeEmployee#salary=jdo:persistent,annotation:dfg

org.apache.jdo.tck.pc.company.Insurance=jdo:persistent,oid:org.apache.jdo.tck.pc.company.Insurance$Oid
org.apache.jdo.tck.pc.company.Insurance#insid=jdo:persistent,annotation:key
org.apache.jdo.tck.pc.company.Insurance#carrier=jdo:persistent,annotation:dfg
org.apache.jdo.tck.pc.company.Insurance#employee=jdo:persistent,annotation:mediated

org.apache.jdo.tck.pc.company.MedicalInsurance=jdo:persistent,super:org.apache.jdo.tck.pc.company.Insurance
org.apache.jdo.tck.pc.company.MedicalInsurance#planType=jdo:persistent,annotation:dfg

org.apache.jdo.tck.pc.company.PartTimeEmployee=jdo:persistent,super:org.apache.jdo.tck.pc.company.Employee
org.apache.jdo.tck.pc.company.PartTimeEmployee#wage=jdo:persistent,annotation:dfg

org.apache.jdo.tck.pc.company.Person=jdo:persistent,oid:org.apache.jdo.tck.pc.company.Person$Oid
org.apache.jdo.tck.pc.company.Person#address=jdo:persistent,annotation:mediated
org.apache.jdo.tck.pc.company.Person#birthdate=jdo:persistent,annotation:dfg
org.apache.jdo.tck.pc.company.Person#firstname=jdo:persistent,annotation:dfg
org.apache.jdo.tck.pc.company.Person#lastname=jdo:persistent,annotation:dfg
org.apache.jdo.tck.pc.company.Person#middlename=jdo:persistent,annotation:mediated
org.apache.jdo.tck.pc.company.Person#personid=jdo:persistent,annotation:key
org.apache.jdo.tck.pc.company.Person#phoneNumbers=jdo:persistent,annotation:mediated

org.apache.jdo.tck.pc.company.Project=jdo:persistent,oid:org.apache.jdo.tck.pc.company.Project$Oid
org.apache.jdo.tck.pc.company.Project#budget=jdo:persistent,annotation:dfg
org.apache.jdo.tck.pc.company.Project#members=jdo:persistent,annotation:mediated
org.apache.jdo.tck.pc.company.Project#name=jdo:persistent,annotation:dfg
org.apache.jdo.tck.pc.company.Project#projid=jdo:persistent,annotation:key
org.apache.jdo.tck.pc.company.Project#reviewers=jdo:persistent,annotation:mediated
