NotesExporter.java :  » Schedule » devoxx2010 » net » peterkuterna » android » apps » devoxxsched » util » Android Open Source

Android Open Source » Schedule » devoxx2010 
devoxx2010 » net » peterkuterna » android » apps » devoxxsched » util » NotesExporter.java
/*
 * Copyright 2010 Google Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/*
 * Modified by Peter Kuterna to also export the session title.
 */
package net.peterkuterna.android.apps.devoxxsched.util;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

import net.peterkuterna.android.apps.devoxxsched.provider.ScheduleContract.Notes;
import net.peterkuterna.android.apps.devoxxsched.provider.ScheduleContract.Sessions;

import org.xmlpull.v1.XmlSerializer;

import android.content.ContentResolver;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.text.format.Time;
import android.util.Xml;


/**
 * Simple exporter that writes {@link Notes} contents into a {@link File} using
 * {@link Xml#newSerializer()}.
 */
public class NotesExporter {

    public static File writeExportedNotes(Context context) throws IOException {
        // TODO: allow customization by accepting dir uri and output file
        final ContentResolver resolver = context.getContentResolver();
        final File notesFile = context.getFileStreamPath("notes.xml");
        final BufferedWriter out = new BufferedWriter(new FileWriter(notesFile));
        final XmlSerializer serializer = Xml.newSerializer();

        serializer.setOutput(out);
        serializer.startDocument("UTF-8", true);
        serializer.startTag("", Tags.NOTES);

        final Time time = new Time();

        final Uri notesUri = Notes.CONTENT_URI;
        final Cursor cursor = resolver.query(notesUri, NotesQuery.PROJECTION, null, null,
                Notes.DEFAULT_SORT);
        try {
            while (cursor.moveToNext()) {
                serializer.startTag("", Tags.NOTE);
                {
                    serializer.startTag("", Tags.SESSION_ID);
                    serializer.text(cursor.getString(NotesQuery.SESSION_ID));
                    serializer.endTag("", Tags.SESSION_ID);
                }
                {
                    serializer.startTag("", Tags.SESSION_TITLE);
                    serializer.text(cursor.getString(NotesQuery.SESSION_TITLE));
                    serializer.endTag("", Tags.SESSION_TITLE);
                }
                {
                    serializer.startTag("", Tags.TIME);
                    time.set(cursor.getLong(NotesQuery.NOTE_TIME));
                    final String timeString = time.format3339(false);
                    serializer.text(timeString);
                    serializer.endTag("", Tags.TIME);
                }
                {
                    serializer.startTag("", Tags.CONTENT);
                    serializer.text(cursor.getString(NotesQuery.NOTE_CONTENT));
                    serializer.endTag("", Tags.CONTENT);
                }
                serializer.endTag("", Tags.NOTE);
            }
        } finally {
            cursor.close();
        }

        serializer.endTag("", Tags.NOTES);
        serializer.endDocument();

        out.flush();
        out.close();

        return notesFile;
    }

    private interface Tags {
        String NOTES = "notes";
        String NOTE = "note";
        String SESSION_ID = "sessionId";
        String SESSION_TITLE = "sessionTitle";
        String CONTENT = "content";
        String TIME = "time";
    }

    private interface NotesQuery {
        String[] PROJECTION = {
                Notes.SESSION_ID,
                Sessions.TITLE,
                Notes.NOTE_CONTENT,
                Notes.NOTE_TIME,
        };

        int SESSION_ID = 0;
        int SESSION_TITLE = 1;
        int NOTE_CONTENT = 2;
        int NOTE_TIME = 3;
    }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.