/*
* 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();
}
}
}
}
}