/**
* MapGenerator Sample Extensions
*/
package mycompany.map.data;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.HashSet;
import mycompany.map.generator.MapGeneratorExtension;
import org.w3c.dom.Element;
import idea.geographic.coordsys.orthogonal2d.S42GeoPosition;
import idea.map.data.AbstractDataValues;
import idea.map.data.DataValue;
import idea.map.generator.MapGenerator;
import idea.mapgen.editor.XmlBean;
/**
* Data values - obtained from PostgreSQL DB.
* See /SQL/measured_data.sql
*
* Usage:
*
* DataValues class="mycompany.map.data.DataValuesFromPgSQL" ...
*
*
* See /runsets/RunSet.xml for sample of usage
*
* @author Lumir Vanek, vanek@idea-envi.cz
*
*/
@XmlBean(icon="DataValuesFromDb.png")
public class DataValuesFromPgSQL extends AbstractDataValues
{
/**
* Serial ID
*/
private static final long serialVersionUID = 569620990893237824L;
/**
* Constructor
*
* @param notRenderedDataValues Codes of data values, that are not rendered on map
* @param disabledDataValues Codes of data values, that are not used for loading
*/
public DataValuesFromPgSQL(HashSet< String > notRenderedDataValues, HashSet< String > disabledDataValues)
{
super(notRenderedDataValues, disabledDataValues);
}
/**
* XML Runset constructor, initialize yourself from given DOM element
*
* @param domElement DOM element
*/
public DataValuesFromPgSQL(Element domElement)
{
super(domElement);
}
/**
* Initialize
*
* @param mapGenerator The Map generator
*/
public void initialize(final MapGenerator mapGenerator)
{
if(mapGenerator instanceof MapGeneratorExtension)
{
MapGeneratorExtension mpe = (MapGeneratorExtension) mapGenerator;
// Connection to PostgreSQL
final Connection connection = mpe.getConnection();
try
{
final Statement stmtSelect = connection.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
try
{
final ResultSet resultSet = stmtSelect.executeQuery("SELECT * FROM measured_data");
try
{
// Load data from measured_data table
while(resultSet.next())
{
String name = resultSet.getString("name");
int positionX = resultSet.getInt("position_x");
int positionY = resultSet.getInt("position_y");
float value = resultSet.getFloat("the_value");
add(new DataValue(value,
new S42GeoPosition(positionX, positionY),
name)
);
}
}
finally
{
resultSet.close();
}
}
finally
{
stmtSelect.close();
}
}
catch (SQLException e)
{
throw new RuntimeException(e.getClass().toString() + " - " + e.getLocalizedMessage());
}
}
else
{
throw new RuntimeException("Map Generator is not MapGeneratorExtension");
}
}
}