1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
|
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 )
}
}
}
|