-- ******************************************************************************
-- Copyright (c) 2007 INRIA. 
-- All rights reserved. This program and the accompanying materials 
-- are made available under the terms of the Eclipse Public License v2.0 
-- which accompanies this distribution, and is available at
-- http://www.eclipse.org/legal/epl-v20.html
-- 
-- Contributors: 
-- 	INRIA - Initial implementation
--  
-- ******************************************************************************

-- @name		ClassicModels
-- @version		1.0
-- @domains		Database, Eclipse, Business reporting, BIRT
-- @authors		Hugo Bruneliere (hugo.bruneliere <at> univ-nantes.fr)
-- @date		2007/02/16
-- @description	This metamodel simply describes the "ClassicModels" BIRT Sample database which is a simple example of typical business data such as customers, orders, order line items, products and so on.
-- @see			The Eclipse BIRT project: http://www.eclipse.org/birt/phoenix/

package ClassicModels {
	
	-- @begin  Utils
	
	abstract class AddressInfo {
		attribute phone : String;
		attribute addressLine1 : String;
		attribute addressLine2 : String;
		attribute city : String;
		attribute state : String;
		attribute postalCode : String;
		attribute country : String;
	}
	
	class Date {
		attribute year : Integer;
		attribute month : Integer;
		attribute day : Integer;
	}
	
	-- @end Utils
	
	
	class ClassicModels {
		reference offices[*] container : Office oppositeOf officeOwner;
		reference productLines[*] container : ProductLine oppositeOf productLineOwner;
		reference customers[*] container : Customer oppositeOf customerOwner;
	}
	
	class ProductLine {
		reference productLineOwner : ClassicModels oppositeOf productLines;
		reference products[*] container : Product oppositeOf productLine;
	
		attribute name : String;
		attribute textDescription : String;
		attribute htmlDescription : String;
	}
	
	class Product {
		reference productLine : ProductLine oppositeOf products;
		
		attribute code : String;
		attribute name : String;
		attribute scale : String;
		attribute vendor : String;
		attribute description : String;
		attribute quantityInStock : Integer;
		attribute buyPrice : Double;
		attribute MSRP : Double;
	}
	
	class Office extends AddressInfo {
		reference officeOwner : ClassicModels oppositeOf offices;
		
		attribute code : String;
		reference employees[*] container : Employee oppositeOf office;
		attribute territory : String;
	}
	
	class Employee {
		reference office : Office oppositeOf employees;
		
		attribute number : Integer;
		reference employeeCustomers[*] : Customer oppositeOf salesRepEmployee;
		attribute lastName : String;
		attribute firstName : String;
		attribute extension : String;
		attribute email : String;
		reference reportsTo : Employee;
		attribute jobTitle : String;
	}
	
	class Customer extends AddressInfo {
		reference customerOwner : ClassicModels oppositeOf customers;
		
		attribute number : Integer;
		reference "orders"[*] ordered container : Order oppositeOf customer;
		reference payments[*] ordered container : Payment oppositeOf customer;
		reference salesRepEmployee : Employee oppositeOf employeeCustomers;
		attribute name : String;
		attribute contactLastName : String;
		attribute contactFirstName :String;
		attribute creditLimit : Double; 
	}
	
	class Payment {
		reference customer : Customer oppositeOf payments;
		attribute checkNumber : String;
		reference date container : Date;
		attribute amount : Double;
	}
	
	class Order {
		reference customer : Customer oppositeOf "orders";
		reference orderDetails[*] ordered container : OrderDetail oppositeOf order;		
		attribute number : Integer;
		reference date container : Date;
		reference requiredDate container : Date;
		reference shippedDate[0-1] container : Date;
		attribute status : String;
		attribute comments : String;	
	}
	
	class OrderDetail {
		reference order : Order oppositeOf orderDetails;
		
		reference product : Product;
		attribute quantityOrdered : Integer;
		attribute priceEach : Double;
	}
	
}

package PrimitiveTypes {
	datatype String;
	datatype Integer;
	datatype Double;
}