// This software is released into the Public Domain.  See copying.txt for details.
package org.openstreetmap.osmosis.pgsimple.v0_6.impl;

import org.openstreetmap.osmosis.pgsimple.common.DatabaseContext;


/**
 * Provides information about which features a database supports.
 * 
 * @author Brett Henderson
 */
public class DatabaseCapabilityChecker {
	private DatabaseContext dbCtx;
	private boolean initialized;
	private boolean isActionSupported;
	private boolean isWayBboxSupported;
	private boolean isWayLinestringSupported;
	
	
	/**
	 * Creates a new instance.
	 * 
	 * @param dbCtx The database context to use for accessing the database.
	 */
	public DatabaseCapabilityChecker(DatabaseContext dbCtx) {
		this.dbCtx = dbCtx;
		
		initialized = false;
	}
	
	
	private void initialize() {
		if (!initialized) {
			isActionSupported = dbCtx.doesTableExist("actions");
			isWayBboxSupported = dbCtx.doesColumnExist("ways", "bbox");
			isWayLinestringSupported = dbCtx.doesColumnExist("ways", "linestring");
			
			initialized = true;
		}
	}
	
	
	/**
	 * Indicates if action support is available.
	 * 
	 * @return True if supported, otherwise false.
	 */
	public boolean isActionSupported() {
		initialize();
		
		return isActionSupported;
	}
	
	
	/**
	 * Indicates if way bounding box support is available.
	 * 
	 * @return True if supported, otherwise false.
	 */
	public boolean isWayBboxSupported() {
		initialize();
		
		return isWayBboxSupported;
	}
	
	
	/**
	 * Indicates if way linestring support is available.
	 * 
	 * @return True if supported, otherwise false.
	 */
	public boolean isWayLinestringSupported() {
		initialize();
		
		return isWayLinestringSupported;
	}
}
