/* * Geopaparazzi - Digital field mapping on Android based devices * Copyright (C) 2010 HydroloGIS (www.hydrologis.com) * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.jgrasstools.gears.io.geopaparazzi.styles; import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.jgrasstools.dbs.compat.ASpatialDb; /** * geopaparazzi related database utilities. * * @author Andrea Antonello (www.hydrologis.com) */ public class GeopaparazziDatabaseProperties implements ISpatialiteTableAndFieldsNames { /** * The complete list of fields in the properties table. */ public static List<String> PROPERTIESTABLE_FIELDS_LIST; static { List<String> fieldsList = new ArrayList<String>(); fieldsList.add(ID); fieldsList.add(NAME); fieldsList.add(SIZE); fieldsList.add(FILLCOLOR); fieldsList.add(STROKECOLOR); fieldsList.add(FILLALPHA); fieldsList.add(STROKEALPHA); fieldsList.add(SHAPE); fieldsList.add(WIDTH); fieldsList.add(LABELSIZE); fieldsList.add(LABELFIELD); fieldsList.add(LABELVISIBLE); fieldsList.add(ENABLED); fieldsList.add(ORDER); fieldsList.add(DASH); fieldsList.add(MINZOOM); fieldsList.add(MAXZOOM); fieldsList.add(DECIMATION); PROPERTIESTABLE_FIELDS_LIST = Collections.unmodifiableList(fieldsList); } /** * Create the properties table. * * @param database the db to use. * @throws Exception */ public static void createPropertiesTable( ASpatialDb database ) throws Exception { StringBuilder sb = new StringBuilder(); sb.append("CREATE TABLE "); sb.append(PROPERTIESTABLE); sb.append(" ("); sb.append(ID); sb.append(" INTEGER PRIMARY KEY AUTOINCREMENT, "); sb.append(NAME).append(" TEXT, "); sb.append(SIZE).append(" REAL, "); sb.append(FILLCOLOR).append(" TEXT, "); sb.append(STROKECOLOR).append(" TEXT, "); sb.append(FILLALPHA).append(" REAL, "); sb.append(STROKEALPHA).append(" REAL, "); sb.append(SHAPE).append(" TEXT, "); sb.append(WIDTH).append(" REAL, "); sb.append(LABELSIZE).append(" REAL, "); sb.append(LABELFIELD).append(" TEXT, "); sb.append(LABELVISIBLE).append(" INTEGER, "); sb.append(ENABLED).append(" INTEGER, "); sb.append(ORDER).append(" INTEGER,"); sb.append(DASH).append(" TEXT,"); sb.append(MINZOOM).append(" INTEGER,"); sb.append(MAXZOOM).append(" INTEGER,"); sb.append(DECIMATION).append(" REAL"); sb.append(" );"); String query = sb.toString(); database.executeInsertUpdateDeleteSql(query); } /** * Create a default properties table for a spatial table. * * @param database the db to use. * @param spatialTableUniqueName the spatial table's unique name to create the property record for. * @return * @return the created style object. * @throws Exception if something goes wrong. */ public static Style createDefaultPropertiesForTable( ASpatialDb database, String spatialTableUniqueName, String spatialTableLabelField ) throws Exception { StringBuilder sbIn = new StringBuilder(); sbIn.append("insert into ").append(PROPERTIESTABLE); sbIn.append(" ( "); sbIn.append(NAME).append(" , "); sbIn.append(SIZE).append(" , "); sbIn.append(FILLCOLOR).append(" , "); sbIn.append(STROKECOLOR).append(" , "); sbIn.append(FILLALPHA).append(" , "); sbIn.append(STROKEALPHA).append(" , "); sbIn.append(SHAPE).append(" , "); sbIn.append(WIDTH).append(" , "); sbIn.append(LABELSIZE).append(" , "); sbIn.append(LABELFIELD).append(" , "); sbIn.append(LABELVISIBLE).append(" , "); sbIn.append(ENABLED).append(" , "); sbIn.append(ORDER).append(" , "); sbIn.append(DASH).append(" ,"); sbIn.append(MINZOOM).append(" ,"); sbIn.append(MAXZOOM).append(" ,"); sbIn.append(DECIMATION); sbIn.append(" ) "); sbIn.append(" values "); sbIn.append(" ( "); Style style = new Style(); style.name = spatialTableUniqueName; style.labelfield = spatialTableLabelField; sbIn.append(style.insertValuesString()); sbIn.append(" );"); String insertQuery = sbIn.toString(); database.executeInsertUpdateDeleteSql(insertQuery); return style; } /** * Update a style definition. * * @param database the db to use. * @param style the {@link Style} to set. * @throws Exception if something goes wrong. */ public static void updateStyle(ASpatialDb database, Style style) throws Exception { StringBuilder sbIn = new StringBuilder(); sbIn.append("update ").append(PROPERTIESTABLE); sbIn.append(" set "); // sbIn.append(NAME).append("='").append(style.name).append("' , "); sbIn.append(SIZE).append("=").append(style.size).append(" , "); sbIn.append(FILLCOLOR).append("='").append(style.fillcolor).append("' , "); sbIn.append(STROKECOLOR).append("='").append(style.strokecolor).append("' , "); sbIn.append(FILLALPHA).append("=").append(style.fillalpha).append(" , "); sbIn.append(STROKEALPHA).append("=").append(style.strokealpha).append(" , "); sbIn.append(SHAPE).append("='").append(style.shape).append("' , "); sbIn.append(WIDTH).append("=").append(style.width).append(" , "); sbIn.append(LABELSIZE).append("=").append(style.labelsize).append(" , "); sbIn.append(LABELFIELD).append("='").append(style.labelfield).append("' , "); sbIn.append(LABELVISIBLE).append("=").append(style.labelvisible).append(" , "); sbIn.append(ENABLED).append("=").append(style.enabled).append(" , "); sbIn.append(ORDER).append("=").append(style.order).append(" , "); sbIn.append(DASH).append("='").append(style.dashPattern).append("' , "); sbIn.append(MINZOOM).append("=").append(style.minZoom).append(" , "); sbIn.append(MAXZOOM).append("=").append(style.maxZoom).append(" , "); sbIn.append(DECIMATION).append("=").append(style.decimationFactor); sbIn.append(" where "); sbIn.append(NAME); sbIn.append("='"); sbIn.append(style.name); sbIn.append("';"); String updateQuery = sbIn.toString(); database.executeInsertUpdateDeleteSql(updateQuery); } }