/*
* GeoSolutions map - Digital field mapping on Android based devices
* Copyright (C) 2013 GeoSolutions (www.geo-solutions.it)
*
* 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 it.geosolutions.android.map.fragment;
import it.geosolutions.android.map.R;
import it.geosolutions.android.map.adapters.SectionAdapter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Adapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import com.actionbarsherlock.app.SherlockFragment;
/**
* Shows a grouped list of feature attributes.
* Expects a bundle with many <ArrayList<Bundle>> and each bundle contains attribute-value couple
* @author Lorenzo Natali (www.geo-solutions.it)
*
*/
public class GetFeatureInfoFragment extends SherlockFragment {
private SectionAdapter layerSection = new SectionAdapter() {
protected View getHeaderView(String caption, int index,
View convertView, ViewGroup parent) {
TextView result = (TextView) convertView;
if (convertView == null) {
result = (TextView) getLayoutInflater(null).inflate(
R.layout.feature_info_header, null);
}
result.setText(caption);
return (result);
}
};
class FeatureSectionAdapter extends SectionAdapter {
protected View getHeaderView(String caption, int index,
View convertView, ViewGroup parent) {
TextView result = (TextView) convertView;
if (convertView == null) {
result = (TextView) getLayoutInflater(null).inflate(
R.layout.feature_info_header, null);
}
result.setText(caption);
return (result);
}
};
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.feature_info_attribute_list, container, false);
return v;
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onViewCreated(view, savedInstanceState);
ListView list = (ListView) getActivity().findViewById(
android.R.id.list);
Bundle b = getArguments().getBundle("data");
if(b==null){
return;//TODO notify problem
}
String[] from = {"name","value"};
int[] to = {R.id.attribute_name,R.id.attribute_value};
Set<String> layerNameSet = b.keySet();
for (String layerName : layerNameSet) {
// Bundle layerBundle = b.getBundle(layerName);
ArrayList<Bundle> layerBundleList = b.getParcelableArrayList(layerName);
if (layerBundleList != null) {
//if some data from the current section
int featureListSize = layerBundleList.size();
if ( featureListSize!= 0) {
FeatureSectionAdapter fsa = new FeatureSectionAdapter();
//create a section for every feature
for(Bundle feature: layerBundleList){
//Crete an array do display a list of strings...
//TODO improve this with a table
ArrayList<Map<String,String>> attributeList= new ArrayList<Map<String,String>>();
for(String attributeName : feature.keySet()){
HashMap<String,String> attribute = new HashMap<String,String>();
attribute.put("name",attributeName);
attribute.put("value",feature.getString(attributeName));
attributeList.add(attribute);
}
//tableLayout.addView(adapter.getView(i, null, tableLayout))
Adapter adapter = new SimpleAdapter(view.getContext(), attributeList, R.layout.feature_info_attribute_row,from,to);
//new ArrayAdapter<String>(view.getContext(), R.layout.feature_info_header,attributes)
fsa.addSection("",adapter );
}
;
layerSection.addSection(layerName, fsa);
}
}
}
// TODO init adapter with headers and data
//
list.setAdapter(layerSection);
}
}