mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			106 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			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 )
 | 
						|
    }
 | 
						|
  }
 | 
						|
} |