ingo@1127: /*
ingo@1127: * Copyright (c) 2010 by Intevation GmbH
ingo@1127: *
ingo@1127: * This program is free software under the LGPL (>=v2.1)
ingo@1127: * Read the file LGPL.txt coming with the software for details
ingo@1127: * or visit http://www.gnu.org/licenses/ if it does not exist.
ingo@1127: */
ingo@1127:
tim@132: package de.intevation.gnv.geobackend.base;
tim@132:
tim@132: import java.util.ArrayList;
tim@271: import java.util.HashMap;
tim@132: import java.util.List;
tim@271: import java.util.Map;
tim@132:
tim@132: /**
tim@132: * This Class is the DefaultImplementation of the
tim@132: * Interface ResultDescriptor
sascha@887: * @author Tim Englich
tim@132: *
tim@132: */
tim@132: public class DefaultResultDescriptor implements ResultDescriptor {
tim@132:
tim@132: /**
tim@141: *The Uid of this Class
tim@141: */
tim@141: private static final long serialVersionUID = 7016889733270716130L;
tim@141: /**
tim@132: * The Names of the Columns of one Result
tim@132: */
tim@132: private List columnNames = new ArrayList();
tim@132: /**
tim@132: * The Name of the Classes of the Values of one Result.
tim@132: */
tim@132: private List columnClassNames = new ArrayList();
tim@271: /**
tim@884: * The Lookup for the Columnindex of the Columnnames
tim@271: */
tim@271: private Map columnIndexLookup = new HashMap();
sascha@885:
tim@132: /**
tim@132: * Constructor
tim@132: */
tim@132: public DefaultResultDescriptor() {
tim@132: super();
tim@132: }
tim@132:
tim@132: /**
tim@132: * @see de.intevation.gnv.geobackend.base.ResultDescriptor#getColumnClassName(int)
tim@132: */
tim@132: public String getColumnClassName(int column) {
tim@132: return this.columnClassNames.get(column);
tim@132: }
tim@132:
tim@132: /**
tim@132: * @see de.intevation.gnv.geobackend.base.ResultDescriptor#getColumnCount()
tim@132: */
tim@132: public int getColumnCount() {
tim@132: return this.columnClassNames.size();
tim@132: }
tim@132:
tim@132: /**
tim@132: * @see de.intevation.gnv.geobackend.base.ResultDescriptor#getColumnName(int)
tim@132: */
tim@132: public String getColumnName(int column) {
tim@132: return this.columnNames.get(column);
tim@132: }
tim@132:
tim@132: /**
tim@132: * @see de.intevation.gnv.geobackend.base.ResultDescriptor#addColumn(java.lang.String, java.lang.String)
tim@132: */
tim@132: public void addColumn(String name, String className) {
tim@132: this.columnClassNames.add(className);
tim@132: this.columnNames.add(name);
tim@271: this.columnIndexLookup.put(name,this.columnNames.size()-1);
tim@132: }
tim@132:
tim@271: /**
tim@271: * @see de.intevation.gnv.geobackend.base.ResultDescriptor#getColumnIndices(java.lang.String[])
tim@271: */
tim@271: public int [] getColumnIndices(String [] columnNames) {
tim@271: if (columnNames == null) {
tim@271: return null;
tim@271: }
tim@271: int [] indices = new int[columnNames.length];
tim@271: for (int i = 0; i < indices.length; ++i) {
tim@271: indices[i] = this.getColumnIndex(columnNames[i]);
tim@271: }
tim@271: return indices;
tim@271: }
tim@271:
tim@271: /**
tim@271: * @see de.intevation.gnv.geobackend.base.ResultDescriptor#getColumnIndex(java.lang.String)
tim@271: */
tim@271: public int getColumnIndex(String columnName) {
sascha@885:
tim@271: Integer value = this.columnIndexLookup.get(columnName);
sascha@381: return value != null ? value.intValue() : -1;
tim@271: }
sascha@553:
tim@884: /**
tim@884: * @see java.lang.Object#toString()
tim@884: */
tim@884: @Override
sascha@553: public String toString() {
sascha@553: StringBuilder sb = new StringBuilder("[");
sascha@553: int N = Math.min(columnNames.size(), columnClassNames.size());
sascha@553: for (int i = 0; i < N; ++i) {
sascha@553: if (i > 0) {
sascha@553: sb.append(", ");
sascha@553: }
sascha@553: sb.append(columnNames.get(i))
sascha@553: .append(": ")
sascha@553: .append(columnClassNames.get(i));
sascha@553: }
sascha@553: sb.append(']');
sascha@553: return sb.toString();
sascha@553: }
tim@271: }