Mark McGranaghan 8d31ec147c move to vendor
2012-11-17 08:21:42 -08:00

106 lines
2.6 KiB
Plaintext

package example
uses java.util.*
uses java.io.File
class Person extends Contact implements IEmailable {
var _name : String
var _age : Integer as Age
var _relationship : Relationship as readonly RelationshipOfPerson
delegate _emailHelper represents IEmailable
enum Relationship {
FRIEND,
FAMILY,
BUSINESS_CONTACT
}
// Map of names to people
static var ALL_PEOPLE = new HashMap<String, Person>()
/* Constructs a new Person */
construct( name : String, age : Integer, relationship : Relationship ) {
_name = name
_age = age
_relationship = relationship
_emailHelper = new EmailHelper( this )
}
property get Name():String{
return _name
}
property set Name(name : String){
_name = name
}
/* Implement IEmailable#getEmailName() */
override function getEmailName():String{
return Name
}
function incrementAge() {
_age++
}
@Deprecated
function printPersonInfo() {
print( "Person { Name : ${Name}, Age : ${Age}, Relationship : ${RelationshipOfPerson} }" )
}
static function addPerson(p : Person){
if(ALL_PEOPLE.containsKey(p?.Name)) {
throw new IllegalArgumentException( "There is already someone named '${p.Name}'." )
}
ALL_PEOPLE[p.Name] = p
}
static function addAllPeople( contacts : List<Contact> ) {
for( contact in contacts ) {
if( contact typeis Person and not ALL_PEOPLE.containsKey( contact.Name )) {
addPerson( contact )
}
}
}
static function getAllPeopleOlderThanNOrderedByName( age : int ) {
var allPeople = ALL_PEOPLE.Values
return allPeople.where( \ p -> p.Age > age ).orderBy( \ p -> p.Name )
}
static function loadPersonFromDB( id : Integer ) {
using( var conn = DBConnectionManager.getConnection(),
var stmt = conn.prepareStatement( "SELECT name, age, relationship FROM PEOPLE WHERE ID=?") ){
stmt.setInt( 0, 0 )
var result = stmt.executeQuery()
if( result.next() ) {
addPerson( new Person( result.getString( "name" ),
result.getInt( "age" ),
Relationship.valueOf( result.getString( "relationship" ) ) ) )
}
}
}
/* Loads in people from a CSV */
static function loadFromFile( file : File ) {
file.eachLine( \ line -> {
if( line.HasContent ) {
addPerson( line.toPerson() )
}
})
}
/* Save people to a CSV */
static function saveToFile( file : File ) {
using( var writer = new FileWriter( file ) ) {
print( PersonCSVTemplate.renderToString( ALL_PEOPLE.Values ) )
PersonCSVTemplate.render( writer, ALL_PEOPLE.Values )
}
}
}