package org.gcube.portlets.user.td.gwtservice.server.trservice; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set; import org.gcube.data.analysis.tabulardata.model.column.ColumnLocalId; import org.gcube.data.analysis.tabulardata.model.column.ColumnReference; import org.gcube.data.analysis.tabulardata.model.datatype.value.TDBoolean; import org.gcube.data.analysis.tabulardata.model.datatype.value.TDDate; import org.gcube.data.analysis.tabulardata.model.datatype.value.TDGeometry; import org.gcube.data.analysis.tabulardata.model.datatype.value.TDInteger; import org.gcube.data.analysis.tabulardata.model.datatype.value.TDNumeric; import org.gcube.data.analysis.tabulardata.model.datatype.value.TDText; import org.gcube.data.analysis.tabulardata.model.table.TableId; import org.gcube.portlets.user.td.gwtservice.shared.Constants; import org.gcube.portlets.user.td.gwtservice.shared.exception.TDGWTServiceException; import org.gcube.portlets.user.td.widgetcommonevent.shared.TRId; import org.gcube.portlets.user.td.widgetcommonevent.shared.tr.column.ColumnData; import org.gcube.portlets.user.td.widgetcommonevent.shared.tr.column.ColumnDataType; import org.gcube.portlets.user.td.widgetcommonevent.shared.tr.column.ColumnTypeCode; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * * @author "Giancarlo Panichi" * */ public class ValueMap { private static Logger logger = LoggerFactory .getLogger(ValueMap.class); public ValueMap(){ } protected SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); public ArrayList> genValueMap(TRId trId, ArrayList columns, HashMap fieldsMap) throws TDGWTServiceException { ArrayList> composit=new ArrayList>(); if(fieldsMap==null){ return composit; } TableId tableId; if(trId.isViewTable()){ tableId=new TableId(new Long(trId.getReferenceTargetTableId())); } else { tableId=new TableId(new Long(trId.getTableId())); } Map parametersValue=fieldsMap; Set keys=parametersValue.keySet(); Iterator iterator=keys.iterator(); String key; while(iterator.hasNext()){ key=iterator.next(); String value=parametersValue.get(key); for(ColumnData col:columns){ if(col.getColumnId().compareTo(key)==0){ if (col.getTypeCode().compareTo( ColumnTypeCode.DIMENSION.toString()) == 0 || col.getTypeCode().compareTo( ColumnTypeCode.TIMEDIMENSION.toString()) == 0) { if(value==null){ logger.error("Error, null value for on dimension or timedimension column is not valid"); continue; } TDInteger tdDim=new TDInteger(new Integer(value)); ColumnLocalId columnId=new ColumnLocalId(key); ColumnReference colRef=new ColumnReference(tableId, columnId); Map valueMap=new HashMap(); valueMap.put(Constants.PARAMETER_ADD_ROW_COMPOSITE_FIELD,colRef); valueMap.put(Constants.PARAMETER_ADD_ROW_COMPOSITE_TOSETVALUE,tdDim); composit.add(valueMap); } else { if (col.getDataTypeName().compareTo( ColumnDataType.Boolean.toString()) == 0) { if(value==null){ continue; } TDBoolean tdBoolean=new TDBoolean(new Boolean(value)); ColumnLocalId columnId=new ColumnLocalId(key); ColumnReference colRef=new ColumnReference(tableId, columnId); Map valueMap=new HashMap(); valueMap.put(Constants.PARAMETER_ADD_ROW_COMPOSITE_FIELD,colRef); valueMap.put(Constants.PARAMETER_ADD_ROW_COMPOSITE_TOSETVALUE,tdBoolean); composit.add(valueMap); } else { if (col.getDataTypeName().compareTo( ColumnDataType.Date.toString()) == 0) { Date d; try{ d=sdf.parse(value); }catch(Exception e){ continue; } TDDate tdDate=new TDDate(d); ColumnLocalId columnId=new ColumnLocalId(key); ColumnReference colRef=new ColumnReference(tableId, columnId); Map valueMap=new HashMap(); valueMap.put(Constants.PARAMETER_ADD_ROW_COMPOSITE_FIELD,colRef); valueMap.put(Constants.PARAMETER_ADD_ROW_COMPOSITE_TOSETVALUE,tdDate); composit.add(valueMap); } else { if (col.getDataTypeName().compareTo( ColumnDataType.Text.toString()) == 0) { if(value==null){ continue; } TDText tdText=new TDText(value); ColumnLocalId columnId=new ColumnLocalId(key); ColumnReference colRef=new ColumnReference(tableId, columnId); Map valueMap=new HashMap(); valueMap.put(Constants.PARAMETER_ADD_ROW_COMPOSITE_FIELD,colRef); valueMap.put(Constants.PARAMETER_ADD_ROW_COMPOSITE_TOSETVALUE,tdText); composit.add(valueMap); } else { if (col.getDataTypeName().compareTo( ColumnDataType.Geometry.toString()) == 0) { TDGeometry tdGeometry; if(TDGeometry.validateGeometry(value)){ tdGeometry=new TDGeometry(value); } else { continue; } ColumnLocalId columnId=new ColumnLocalId(key); ColumnReference colRef=new ColumnReference(tableId, columnId); Map valueMap=new HashMap(); valueMap.put(Constants.PARAMETER_ADD_ROW_COMPOSITE_FIELD,colRef); valueMap.put(Constants.PARAMETER_ADD_ROW_COMPOSITE_TOSETVALUE,tdGeometry); composit.add(valueMap); } else { if (col.getDataTypeName().compareTo( ColumnDataType.Integer.toString()) == 0) { if(value==null){ continue; } Integer integ; try{ integ=new Integer(value); } catch(NumberFormatException e){ continue; } TDInteger tdInteger=new TDInteger(integ); ColumnLocalId columnId=new ColumnLocalId(key); ColumnReference colRef=new ColumnReference(tableId, columnId); Map valueMap=new HashMap(); valueMap.put(Constants.PARAMETER_ADD_ROW_COMPOSITE_FIELD,colRef); valueMap.put(Constants.PARAMETER_ADD_ROW_COMPOSITE_TOSETVALUE,tdInteger); composit.add(valueMap); } else { if (col.getDataTypeName().compareTo( ColumnDataType.Numeric.toString()) == 0) { if(value==null){ continue; } Double numeric; try{ numeric=new Double(value); } catch(NumberFormatException e){ continue; } TDNumeric tdNumeric=new TDNumeric(numeric); ColumnLocalId columnId=new ColumnLocalId(key); ColumnReference colRef=new ColumnReference(tableId, columnId); Map valueMap=new HashMap(); valueMap.put(Constants.PARAMETER_ADD_ROW_COMPOSITE_FIELD,colRef); valueMap.put(Constants.PARAMETER_ADD_ROW_COMPOSITE_TOSETVALUE,tdNumeric); composit.add(valueMap); } else { } } } } } } } break; } } } return composit; } }