tim@129: /** tim@129: * Title: Row, $Header: /share/gdi/SDI-Suite/Repository/projekte/BSH-GDI/genericViewer/src/main/java/de/conterra/bsh/gdi/gnviewer/datasources/Row.java,v 1.4 2008/01/30 12:38:34 blume Exp $ tim@129: * Source: $Source: /share/gdi/SDI-Suite/Repository/projekte/BSH-GDI/genericViewer/src/main/java/de/conterra/bsh/gdi/gnviewer/datasources/Row.java,v $ tim@129: * created by: Stefan Blume (blume) tim@129: * erstellt am: 21.11.2007 tim@129: * Copyright: con terra GmbH, 2005 tim@129: * tim@129: * modified by: $Author: blume $ tim@129: * modified on: $Date: 2008/01/30 12:38:34 $ tim@129: * Version: $Revision: 1.4 $ tim@129: * TAG: $Name: $ tim@129: * locked from: $Locker: $ tim@129: * CVS State: $State: Exp $ tim@129: * Project: $ProjectName$ tim@129: */ tim@129: package de.intevation.gnv.geobackend.sde.datasources; tim@129: tim@129: import java.util.ArrayList; tim@129: import java.util.Calendar; tim@129: import java.util.Date; tim@129: tim@129: import org.apache.log4j.Logger; tim@129: tim@129: import com.esri.sde.sdk.client.SDEPoint; tim@129: import com.esri.sde.sdk.client.SeException; tim@129: import com.esri.sde.sdk.client.SeShape; tim@129: tim@129: import de.intevation.gnv.geobackend.sde.datasources.exception.TechnicalException; tim@129: import de.intevation.gnv.geobackend.util.DateUtils; tim@129: tim@129: /** tim@129: * A Row represents a set of values. tim@129: * In a technical manner (e.g. database manner) a row contains all attributes of a single "hit". tim@129: * tim@129: * @author blume tim@129: * @version 1.0 tim@129: * @serial 1.0 tim@129: * @see tim@129: * @since 21.11.2007 11:00:54 tim@129: */ tim@129: public class Row { tim@129: tim@129: /** tim@129: * Default Logging instance tim@129: */ tim@129: private static Logger sLogger = Logger.getLogger(Row.class); tim@129: private static boolean sDebug = sLogger.isDebugEnabled(); tim@129: tim@129: /** tim@129: * Data container. tim@129: */ tim@129: private Object[] mObjects; tim@129: tim@129: /** tim@129: * Constructor. tim@129: * tim@129: * @param pRowSize the number of attributes contained by this row. tim@129: */ tim@129: public Row(int pRowSize) { tim@129: mObjects = new Object[pRowSize]; tim@129: } tim@129: tim@129: /** tim@129: * Constructor. tim@129: * tim@129: * @param ArrayStr a line from CSV-File. tim@129: */ tim@129: public Row (String[] ArrayStr){ tim@129: this (ArrayStr.length); tim@129: int nLength = ArrayStr.length; tim@129: for (int i=0; i < nLength; i++){ tim@129: //if (sDebug) tim@129: // sLogger.debug(" ArrayStr["+i+" ]=" + ArrayStr[i]); tim@129: addObject(ArrayStr[i], i); tim@129: tim@129: } tim@129: tim@129: } tim@129: tim@129: tim@129: /** tim@129: * Adds an attribute value to a specific position of this row. tim@129: * tim@129: * @param pObject the object to be stored. tim@129: * @param pPos the postion the value to be saved tim@129: */ tim@129: public void addObject(Object pObject, int pPos) { tim@129: mObjects[pPos] = pObject; tim@129: } tim@129: tim@129: /** tim@129: * Returns a Value out of the Row. tim@129: * tim@129: * @param pPos the position of the value to be returned. tim@129: * @return an Object! (not strongly typed) tim@129: * @throws TechnicalException tim@129: */ tim@129: public Object getValue(int pPos) throws TechnicalException { tim@129: if (pPos < mObjects.length) { tim@263: tim@263: Object o = mObjects[pPos]; tim@263: if (o instanceof SeShape){ tim@263: return this.getPosValue(pPos); tim@263: }else{ tim@263: return o; tim@263: } tim@129: } else { tim@129: throw new TechnicalException("Cannot access this field position. Size is: " + mObjects.length); tim@129: } tim@129: } tim@129: tim@129: tim@129: /** tim@129: * This is a covenient method for getting strongly typed objects out of the row. tim@129: * It has to be ensured, that the type of the requested row position has been resolved out of the ColumnDefinition ({@link ResultSet#getColumnDefinitions()}). tim@129: * In fact, this method executes a simple cast to the desired type. tim@129: * tim@129: * @param pPos the position of the object to be resolved. tim@129: * @return a strongly typed Date tim@129: * @throws TechnicalException tim@129: * @see #getValue(int) tim@129: */ tim@129: public Date getDateValue(int pPos) throws TechnicalException { tim@129: Date date = null; tim@129: try { tim@129: Calendar lCalendar = (Calendar) getValue(pPos); tim@129: date = lCalendar.getTime(); tim@129: } tim@129: catch (ClassCastException e) { tim@129: try{ tim@129: //SimpleDateFormat formatter = new SimpleDateFormat("dd-MMM-yyyy HH:mm:ss"); tim@129: date = DateUtils.getDateFromString ((String)getValue(pPos)); //(Date)formatter.parse((String)getValue(pPos)); tim@129: tim@129: tim@129: } tim@129: catch (Exception ex){ tim@129: sLogger.error(getValue(pPos) + " " + ex.getMessage(), ex); tim@129: throw new TechnicalException("Could not cast this value to the Date Type. Object is of value type: " + getValue(pPos).getClass().getName()); tim@129: } tim@129: } tim@129: tim@129: return date; tim@129: } tim@129: tim@129: /** tim@129: * This is a covenient method for getting strongly typed objects out of the row. tim@129: * It has to be ensured, that the type of the requested row position has been resolved out of the ColumnDefinition ({@link ResultSet#getColumnDefinitions()}). tim@129: * In fact, this method executes a simple cast to the desired type. tim@129: * tim@129: * @param pPos the position of the object to be resolved. tim@129: * @return a strongly typed String tim@129: * @throws TechnicalException tim@129: * @see #getValue(int) tim@129: */ tim@129: public String getStringValue(int pPos) throws TechnicalException { tim@129: try { tim@263: Object o = this.getValue(pPos); tim@263: String returnValue = null; tim@263: if (o instanceof SeShape){ tim@263: returnValue = this.getPosValue(pPos); tim@263: }else{ tim@263: returnValue = (String)o; tim@263: } tim@263: return returnValue; tim@129: } catch (ClassCastException e) { tim@129: throw new TechnicalException("Could not cast this value to the String Type. Object is of value type: " + getValue(pPos).getClass().getName()); tim@129: } tim@129: } tim@129: tim@129: /** tim@129: * This is a covenient method for getting strongly typed objects out of the row. tim@129: * It has to be ensured, that the type of the requested row position has been resolved out of the ColumnDefinition ({@link ResultSet#getColumnDefinitions()}). tim@129: * In fact, this method executes a simple cast to the desired type. tim@129: * tim@129: * @param pPos the position of the object to be resolved. tim@129: * @throws TechnicalException tim@129: * @see #getValue(int) tim@129: * * @return a strongly typed int tim@129: */ tim@129: public int getIntValue(int pPos) throws TechnicalException { tim@129: try { tim@129: return (Integer) getValue(pPos); tim@129: } catch (ClassCastException e) { tim@129: throw new TechnicalException("Could not cast this value to the Integer Type. Object is of value type: " + getValue(pPos).getClass().getName()); tim@129: } tim@129: } tim@129: tim@129: /** tim@129: * This is a covenient method for getting strongly typed objects out of the row. tim@129: * It has to be ensured, that the type of the requested row position has been resolved out of the ColumnDefinition ({@link ResultSet#getColumnDefinitions()}). tim@129: * In fact, this method executes a simple cast to the desired type. tim@129: * tim@129: * @param pPos the position of the object to be resolved. tim@129: * @throws TechnicalException tim@129: * @see #getValue(int) tim@129: * * @return a strongly typed Double tim@129: */ tim@129: public Double getDoubleValue(int pPos) throws TechnicalException { tim@129: try { tim@129: return (Double) getValue(pPos); tim@129: } catch (ClassCastException e) { tim@129: try{ tim@129: return new Double ((String)getValue(pPos)); tim@129: } tim@129: catch(Exception ex){ tim@129: sLogger.error(getValue(pPos) + " " + ex.getMessage(), ex); tim@129: throw new TechnicalException("Could not cast this value to the Double Type. Object is of value type: " + getValue(pPos).getClass().getName()); tim@129: } tim@129: } tim@129: } tim@129: tim@129: /** tim@129: * This is a covenient method for getting strongly typed objects out of the row. tim@129: * It has to be ensured, that the type of the requested row position has been resolved out of the ColumnDefinition ({@link ResultSet#getColumnDefinitions()}). tim@129: * In fact, this method executes a simple cast to the desired type. tim@129: * tim@129: * @param pPos the position of the object to be resolved. tim@129: * @return a strongly typed Float tim@129: * @throws TechnicalException tim@129: * @see #getValue(int) tim@129: */ tim@129: public Float getFloatValue(int pPos) throws TechnicalException { tim@129: try { tim@129: return (Float) getValue(pPos); tim@129: } catch (ClassCastException e) { tim@129: throw new TechnicalException("Could not cast this value to the Float Type. Object is of value type: " + getValue(pPos).getClass().getName()); tim@129: } tim@129: } tim@129: /** tim@129: * This is a covenient method for getting strongly typed objects out of the row. tim@129: * It has to be ensured, that the type of the requested row position has been resolved out of the ColumnDefinition ({@link ResultSet#getColumnDefinitions()}). tim@129: * In fact, this method executes a simple cast to the desired type. tim@129: * tim@129: * @param pPos the position of the object to be resolved. tim@129: * @return a strongly typed Float tim@129: * @throws TechnicalException tim@129: * @see #getValue(int) tim@129: */ tim@129: public String getPosValue(int pPos)throws TechnicalException{ tim@268: SeShape val; tim@268: ArrayList aList; tim@268: SDEPoint mPoint[]; tim@268: StringBuffer returnValue = new StringBuffer(); tim@268: synchronized (returnValue) { tim@268: tim@268: try { tim@268: val = (SeShape) this.mObjects[pPos]; tim@268: aList = val.getAllPoints(0,false); tim@268: mPoint = (SDEPoint[])aList.get(0); tim@268: tim@268: if (mPoint.length == 1){ // PUNKT tim@268: returnValue.append("POINT(").append(mPoint[0].getX()).append(" ").append(mPoint[0].getY()).append(")"); tim@268: }else{ tim@268: returnValue.append("LINESTRING("); tim@268: for (int i = 0; i< mPoint.length;i++){ tim@268: returnValue.append(mPoint[0].getX()).append(" ").append(mPoint[0].getY()); tim@268: if (i < mPoint.length-1){ tim@268: returnValue.append(" , "); tim@268: } tim@268: } tim@268: returnValue.append(")"); tim@268: } tim@268: // String nord="N"; tim@268: // String ost="E"; tim@268: // if (lat <0 ){nord="S"; lat=-lat;} tim@268: // if (lon <0 ){ost="W"; lon=-lon;} tim@268: // return String.format("%1$02d°%2$1S %3$05.2f' %4$03d°%5$1S %6$05.2f'", tim@268: // (int)lat, nord,60.*(lat-((int)lat)),(int)lon,ost,60.*(lon-((int)lon))); tim@268: } catch (SeException e) { tim@268: throw new TechnicalException("Could not cast this value to the Float Type. Object is of value type: " + getValue(pPos).getClass().getName()); tim@268: } tim@129: } tim@268: return returnValue.toString(); tim@129: } tim@129: }