All Downloads are FREE. Search and download functionalities are using the official Maven repository.

mil.nga.geopackage.user.custom.UserCustomColumns Maven / Gradle / Ivy

package mil.nga.geopackage.user.custom;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import mil.nga.geopackage.user.UserColumns;

/**
 * Collection of user custom columns
 * 
 * @author osbornb
 * @since 3.5.0
 */
public class UserCustomColumns extends UserColumns {

	/**
	 * Required columns
	 */
	private Collection requiredColumns;

	/**
	 * Constructor
	 * 
	 * @param tableName
	 *            table name
	 * @param columns
	 *            columns
	 */
	public UserCustomColumns(String tableName, List columns) {
		this(tableName, columns, null);
	}

	/**
	 * Constructor
	 * 
	 * @param tableName
	 *            table name
	 * @param columns
	 *            columns
	 * @param requiredColumns
	 *            list of required columns
	 */
	public UserCustomColumns(String tableName, List columns,
			Collection requiredColumns) {
		this(tableName, columns, requiredColumns, false);
	}

	/**
	 * Constructor
	 * 
	 * @param tableName
	 *            table name
	 * @param columns
	 *            columns
	 * @param custom
	 *            custom column specification
	 */
	public UserCustomColumns(String tableName, List columns,
			boolean custom) {
		this(tableName, columns, null, custom);
	}

	/**
	 * Constructor
	 * 
	 * @param tableName
	 *            table name
	 * @param columns
	 *            columns
	 * @param requiredColumns
	 *            list of required columns
	 * @param custom
	 *            custom column specification
	 */
	public UserCustomColumns(String tableName, List columns,
			Collection requiredColumns, boolean custom) {
		super(tableName, columns, custom);
		this.requiredColumns = requiredColumns;

		updateColumns();
	}

	/**
	 * Copy Constructor
	 * 
	 * @param userCustomColumns
	 *            user custom columns
	 */
	public UserCustomColumns(UserCustomColumns userCustomColumns) {
		super(userCustomColumns);
		if (userCustomColumns.requiredColumns != null) {
			this.requiredColumns = new ArrayList<>(
					userCustomColumns.requiredColumns);
		}
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public UserCustomColumns copy() {
		return new UserCustomColumns(this);
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	protected void updateColumns() {
		super.updateColumns();

		if (!isCustom() && requiredColumns != null
				&& !requiredColumns.isEmpty()) {

			Set search = new HashSet<>(requiredColumns);
			Map found = new HashMap<>();

			// Find the required columns
			for (UserCustomColumn column : getColumns()) {

				String columnName = column.getName();
				int columnIndex = column.getIndex();

				if (search.contains(columnName)) {
					Integer previousIndex = found.get(columnName);
					duplicateCheck(columnIndex, previousIndex, columnName);
					found.put(columnName, columnIndex);
				}
			}

			// Verify the required columns were found
			for (String requiredColumn : search) {
				missingCheck(found.get(requiredColumn), requiredColumn);
			}
		}
	}

	/**
	 * Get the required columns
	 * 
	 * @return required columns
	 */
	public Collection getRequiredColumns() {
		return requiredColumns;
	}

	/**
	 * Set the required columns
	 * 
	 * @param requiredColumns
	 *            required columns
	 */
	public void setRequiredColumns(Collection requiredColumns) {
		this.requiredColumns = requiredColumns;
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy