ro.nextreports.designer.action.favorites.FavoritesUtil.java Source code

Java tutorial

Introduction

Here is the source code for ro.nextreports.designer.action.favorites.FavoritesUtil.java

Source

/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You 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.
 */
package ro.nextreports.designer.action.favorites;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.text.Collator;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import ro.nextreports.designer.Globals;

import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;

/**
 * Utilities class for favorites
 * 
 * @author Mihai Dinca-Panaitescu
 * @date 15.05.2013
 */
public class FavoritesUtil {

    private static Log LOG = LogFactory.getLog(FavoritesUtil.class);

    private static final String FAVORITES_XML = "favorites.xml";

    public static final String FAV_REPORT = "report";
    public static final String FAV_CHART = "chart";

    public static XStream createXStream() {
        XStream xstream = new XStream(new DomDriver("UTF-8"));
        xstream.setMode(XStream.NO_REFERENCES);
        xstream.alias("favorite", FavoriteEntry.class);
        return xstream;
    }

    public static List<FavoriteEntry> loadFavorites() {
        XStream xstream = createXStream();
        return loadFavorites(xstream);
    }

    @SuppressWarnings("unchecked")
    public static List<FavoriteEntry> loadFavorites(XStream xstream) {
        List<FavoriteEntry> favorites = new ArrayList<FavoriteEntry>();
        FileInputStream fis = null;
        InputStreamReader reader = null;
        try {
            fis = new FileInputStream(Globals.USER_DATA_DIR + "/" + FAVORITES_XML);
            reader = new InputStreamReader(fis, "UTF-8");
            favorites = (List<FavoriteEntry>) xstream.fromXML(reader);
        } catch (FileNotFoundException ex) {
            // nothing to do -> file is not created yet
        } catch (Exception ex) {
            ex.printStackTrace();
            LOG.error(ex.getMessage(), ex);
        } finally {
            if (fis != null) {
                try {
                    fis.close();
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
            }
        }
        Collections.sort(favorites, new Comparator<FavoriteEntry>() {
            @Override
            public int compare(FavoriteEntry o1, FavoriteEntry o2) {
                return Collator.getInstance().compare(o1.getName(), o2.getName());
            }
        });
        return favorites;
    }

    public static void saveFavorites(List<FavoriteEntry> favorites) {
        XStream xstream = createXStream();
        saveFavorites(xstream, favorites);
    }

    public static void saveFavorites(XStream xstream, List<FavoriteEntry> favorites) {
        FileOutputStream fos = null;
        try {
            fos = new FileOutputStream(Globals.USER_DATA_DIR + "/" + FAVORITES_XML);
            xstream.toXML(favorites, fos);
            Globals.getMainMenuBar().recreateMenuFavorites();
        } catch (Exception ex) {
            LOG.error(ex.getMessage(), ex);
            ex.printStackTrace();
        } finally {
            if (fos != null) {
                try {
                    fos.close();
                } catch (IOException ex) {
                    ex.printStackTrace();
                }
            }
        }
    }

}