public <T> void createProperty(Property<T> ap) {
Util.assertNotNull(ap);
Connection sqlConn = null;
PreparedStatement ps = null;
try {
sqlConn = getDataSource().getConnection();
if (existProperty(ap.getName())) {
throw new PropertyAlreadyExistException(ap.getName());
}
ps = sqlConn.prepareStatement(getQueryBuilder().createProperty());
ps.setString(1, ap.getName());
ps.setString(2, ap.getType());
ps.setString(3, ap.asString());
ps.setString(4, ap.getDescription());
if (ap.getFixedValues() != null && !ap.getFixedValues().isEmpty()) {
String fixedValues = ap.getFixedValues().toString();
ps.setString(5, fixedValues.substring(1, fixedValues.length() - 1));
} else {
ps.setString(5, null);
}
ps.executeUpdate();
} catch (SQLException sqlEX) {
throw new PropertyAccessException("Cannot update properties database, SQL ERROR", sqlEX);
} finally {
closeStatement(ps);
closeConnection(sqlConn);
}
}