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 )
 | |
|     }
 | |
|   }
 | |
| } |