Package org.geoserver.rest.format

Source Code of org.geoserver.rest.format.MapJSONFormat

/* Copyright (c) 2001 - 2007 TOPP - www.openplans.org.  All rights reserved.
* This code is licensed under the GPL 2.0 license, availible at the root
* application directory.
*/
package org.geoserver.rest.format;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.Collection;
import java.util.Iterator;
import java.util.Map;

import net.sf.json.JSON;
import net.sf.json.JSONArray;
import net.sf.json.JSONNull;
import net.sf.json.JSONObject;

import org.restlet.data.MediaType;
import org.restlet.data.Request;
import org.restlet.data.Response;
import org.restlet.resource.Representation;
import org.restlet.resource.Resource;

/**
* A format that automatically converts a map into JSON and vice versa.
* <p>
* The <a href="http://json-lib.sourceforge.net/">json-lib</a> library is used to read and
* write JSON.
* </p>
*
*
* @author David Winslow <dwinslow@openplans.org>
*/
public class MapJSONFormat extends StreamDataFormat {

    public MapJSONFormat(){
        super(MediaType.APPLICATION_JSON);
    }

    @Override
    protected void write(Object object, OutputStream out) throws IOException {
        //TODO: character set
        Writer outWriter = new BufferedWriter(new OutputStreamWriter(out));

        //JD: why does this initial flush occur?
        outWriter.flush();

        JSON obj = (JSON)toJSONObject(object);

        obj.write(outWriter);
        outWriter.flush();
    }
   
    public Object toJSONObject(Object obj) {
        if (obj instanceof Map) {
            Map m = (Map) obj;
            JSONObject json = new JSONObject();
            Iterator it = m.entrySet().iterator();

            while (it.hasNext()) {
                Map.Entry entry = (Map.Entry) it.next();
                json.put((String) entry.getKey(), toJSONObject(entry.getValue()));
            }

            return json;
        } else if (obj instanceof Collection) {
            Collection col = (Collection) obj;
            JSONArray json = new JSONArray();
            Iterator it = col.iterator();

            while (it.hasNext()) {
                json.add(toJSONObject(it.next()));
            }

            return json;
        } else if (obj instanceof Number) {
            return obj;
        } else if (obj == null) {
            return JSONNull.getInstance();
        } else {
            return obj.toString();
        }
    }
   
    public Representation createRepresentation(Object data, Resource resource,
            Request request, Response response) {
        return null;
    }

    @Override
    protected Object read(InputStream in) throws IOException {
        //TODO: character set
        BufferedReader reader = new BufferedReader( new InputStreamReader( in ) );
        StringBuilder text = new StringBuilder();
        String line = null;
        while( ( line = reader.readLine() ) != null ) {
            text.append( line );
        }
        return JSONObject.fromObject(text.toString());
    }
}
TOP

Related Classes of org.geoserver.rest.format.MapJSONFormat

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.