content: /**
   * Copyright (C) 2011 K Venkata Sudhakar <kvenkatasudhakar@gmail.com>
   * 
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   * 
   *         http://www.apache.org/licenses/LICENSE-2.0
   * 
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  package act.cli.ascii_table;
  
  /*-
   * #%L
   * ACT Framework
   * %%
   * Copyright (C) 2014 - 2017 ActFramework
   * %%
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   * 
   *      http://www.apache.org/licenses/LICENSE-2.0
   * 
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   * #L%
   */
  
  
  import act.cli.ascii_table.impl.CollectionASCIITableAware;
  import act.cli.ascii_table.spec.IASCIITableAware;
  
  import java.util.Arrays;
  import java.util.List;
  
  /**
   * ASCII Table test cases.
   * 
   * @author K Venkata Sudhakar (kvenkatasudhakar@gmail.com)
   * @version 1.0
   *
   */
  public class Test {
  
  	/**
  	 * @param args
  	 */
  	public static void main(String[] args) throws Exception {
  		basicTests();
  		//h2JDBCTests();
  		//oracleJDBCTests();
  		collectionTests();
  	}
  	
  	private static void basicTests() {
  		
  		String [] header = { "User Name", 
  	    		"Salary", "Designation",
  	    		"Address", "Lucky#"
  	    		};
  		
  	    String[][] data = {
  	    		{ "Ram", "2000", "Manager", "#99, Silk board", "1111"  },
  	    		{ "Sri", "12000", "Developer", "BTM Layout", "22222" },
  	    		{ "Prasad", "42000", "Lead", "#66, Viaya Bank Layout", "333333" },
  	    		{ "Anu", "132000", "QA", "#22, Vizag", "4444444" },
  	    		{ "Sai", "62000", "Developer", "#3-3, Kakinada"  },
  	    		{ "Venkat", "2000", "Manager"   },
  	    		{ "Raj", "62000"},
  	    		{ "BTC"},
  	    };
  	    
  	    //ASCIITable.getInstance().printTable(header, ASCIITable.ALIGN_RIGHT, data, ASCIITable.ALIGN_LEFT);
  	    //ASCIITable.getInstance().printTable(header, data, ASCIITable.ALIGN_LEFT);
  	    
  	    ASCIITableHeader[] headerObjs = {
  	    		new ASCIITableHeader("User Name", ASCIITable.ALIGN_LEFT),
  	    		new ASCIITableHeader("Salary"),
  	    		new ASCIITableHeader("Designation", ASCIITable.ALIGN_CENTER),
  	    		new ASCIITableHeader("Address", ASCIITable.ALIGN_LEFT),
  	    		new ASCIITableHeader("Lucky#", ASCIITable.ALIGN_RIGHT),
  	    };
  	    
  	    ASCIITable.getInstance().printTable(headerObjs, data);
  	    ASCIITable.getInstance().printTable(header, data);
  	}
  
  	private static void collectionTests() {
  	
  		Employee stud = new Employee("Sriram", 2, "Chess", false, 654321.21d, "15 King street Woolooware", "0411010120");
  		Employee stud2 = new Employee("Sudhakar", 29, "Painting", true, 123456789.12d, "5/16 real street barry", "0453010113");
  	    List<Employee> students = Arrays.asList(stud, stud2);
  	 
  	    IASCIITableAware asciiTableAware =
  	    	new CollectionASCIITableAware<Employee>(students,
  	    			"name", "age", "married", "salary");  //properties to read
  	    ASCIITable.getInstance().printTable(asciiTableAware);
  	    
  	    
  	    asciiTableAware = 
  	    	new CollectionASCIITableAware<Employee>(students, 
  	    			Arrays.asList("name", "age", "married", "hobby", "salary", "contact.mobile as mobile", "contact/address as address"), //properties to read
  	    			Arrays.asList("STUDENT_NAME", "HIS_AGE")); //custom headers
  	    ASCIITable.getInstance().printTable(asciiTableAware);
  	}
  
  	public static class Contact {
  		private String address;
  		private String mobile;
  		private Contact() {}
  
  		public Contact(String address, String mobile) {
  			this.address = address;
  			this.mobile = mobile;
  		}
  	}
  
  	public static class Employee {
  	
  		private String name;
  		private int age;
  		private String hobby;
  		private boolean married;
  		private double salary;
  		private Contact contact;
  	
  		public Employee(String name, int age, String hobby, boolean married, double salary, String address, String mobile) {
  			super();
  			this.name = name;
  			this.age = age;
  			this.hobby = hobby;
  			this.married = married;
  			this.salary = salary;
  			this.contact = new Contact(address, mobile);
  		}
  	
  		public String getName() {
  			return name;
  		}
  	
  		public void setName(String name) {
  			this.name = name;
  		}
  	
  		public int getAge() {
  			return age;
  		}
  	
  		public void setAge(int age) {
  			this.age = age;
  		}
  	
  		public String getHobby() {
  			return hobby;
  		}
  	
  		public void setHobby(String hobby) {
  			this.hobby = hobby;
  		}
  	
  		public boolean isMarried() {
  			return married;
  		}
  
  		public void setMarried(boolean married) {
  			this.married = married;
  		}
  
  		public double getSalary() {
  			return salary;
  		}
  
  		public void setSalary(double salary) {
  			this.salary = salary;
  		}
  	}
  	
  }
  