package org.jwildfire.create.tina.browser; import java.io.File; import java.io.Serializable; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Collections; import java.util.Comparator; import java.util.Date; import java.util.GregorianCalendar; import java.util.HashMap; import java.util.List; import java.util.Map; import org.jwildfire.base.Tools; public class FlameFlatNodes implements Serializable { private static final long serialVersionUID = 1L; private final List<FlameFlatNode> nodes = new ArrayList<FlameFlatNode>(); public void sortNodes() { final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Collections.sort(nodes, new Comparator<FlameFlatNode>() { @Override public int compare(FlameFlatNode o1, FlameFlatNode o2) { String ageString1 = sdf.format(o1.getFileage()); String ageString2 = sdf.format(o2.getFileage()); int ageCompare = ageString1.compareTo(ageString2); if (ageCompare > 0) { return -1; } else if (ageCompare < 0) { return +1; } else { return o1.getCaption().compareTo(o2.getCaption()); } } }); } public void clear() { nodes.clear(); } public void scanFlames(String pPath) { clear(); scanDrawer(pPath); } private void scanDrawer(String pPath) { File root = new File(pPath); File[] list = root.listFiles(); if (list != null) { for (File f : list) { if (f.isDirectory()) { scanDrawer(f.getAbsolutePath()); } else { String filename = f.getAbsolutePath(); String lcFilename = filename.toLowerCase(); if (lcFilename.length() != filename.length()) { lcFilename = filename; } int pos = lcFilename.lastIndexOf("." + Tools.FILEEXT_FLAME.toLowerCase()); if (pos > 0 && pos == filename.length() - Tools.FILEEXT_FLAME.length() - 1) { FlameFlatNode node = new FlameFlatNode(f.getAbsolutePath(), new Date(f.lastModified())); nodes.add(node); } } } } } public List<Date> getDistinctFiledates() { final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); List<Date> res = new ArrayList<Date>(); Map<String, String> dateStrMap = new HashMap<String, String>(); for (FlameFlatNode node : nodes) { String dateStr = sdf.format(node.getFileage()); if (dateStrMap.get(dateStr) == null) { dateStrMap.put(dateStr, dateStr); res.add(node.getFileage()); } } return res; } public List<FlameFlatNode> getDayNodes(Date pDay) { List<FlameFlatNode> res = new ArrayList<FlameFlatNode>(); Calendar cal = GregorianCalendar.getInstance(); cal.setTime(pDay); int refYear = cal.get(Calendar.YEAR); int refMonth = cal.get(Calendar.MONTH); int refDay = cal.get(Calendar.DAY_OF_MONTH); for (FlameFlatNode node : nodes) { cal.setTime(node.getFileage()); int year = cal.get(Calendar.YEAR); int month = cal.get(Calendar.MONTH); int day = cal.get(Calendar.DAY_OF_MONTH); if (year == refYear && month == refMonth && day == refDay) { res.add(node); } } return res; } public List<Date> getDistinctMonths() { final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM"); List<Date> res = new ArrayList<Date>(); Map<String, String> dateStrMap = new HashMap<String, String>(); for (FlameFlatNode node : nodes) { String dateStr = sdf.format(node.getFileage()); if (dateStrMap.get(dateStr) == null) { dateStrMap.put(dateStr, dateStr); res.add(node.getFileage()); } } return res; } public List<FlameFlatNode> getMonthNodes(Date pMonth) { List<FlameFlatNode> res = new ArrayList<FlameFlatNode>(); Calendar cal = GregorianCalendar.getInstance(); cal.setTime(pMonth); int refYear = cal.get(Calendar.YEAR); int refMonth = cal.get(Calendar.MONTH); for (FlameFlatNode node : nodes) { cal.setTime(node.getFileage()); int year = cal.get(Calendar.YEAR); int month = cal.get(Calendar.MONTH); if (year == refYear && month == refMonth) { res.add(node); } } return res; } public List<Date> getDistinctDays(Date pMonth) { final SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM"); String refMonthStr = sdfMonth.format(pMonth); final SimpleDateFormat sdfDay = new SimpleDateFormat("yyyy-MM-dd"); List<Date> res = new ArrayList<Date>(); Map<String, String> dateStrMap = new HashMap<String, String>(); for (FlameFlatNode node : nodes) { String monthStr = sdfMonth.format(node.getFileage()); if (refMonthStr.equals(monthStr)) { String dayStr = sdfDay.format(node.getFileage()); if (dateStrMap.get(dayStr) == null) { dateStrMap.put(dayStr, dayStr); res.add(node.getFileage()); } } } return res; } }