001/* 002 * Stallion Core: A Modern Web Framework 003 * 004 * Copyright (C) 2015 - 2016 Stallion Software LLC. 005 * 006 * This program is free software: you can redistribute it and/or modify it under the terms of the 007 * GNU General Public License as published by the Free Software Foundation, either version 2 of 008 * the License, or (at your option) any later version. This program is distributed in the hope that 009 * it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of 010 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public 011 * License for more details. You should have received a copy of the GNU General Public License 012 * along with this program. If not, see <http://www.gnu.org/licenses/gpl-2.0.html>. 013 * 014 * 015 * 016 */ 017 018package io.stallion.dataAccess.file; 019 020import java.util.List; 021import java.util.Map; 022 023import static io.stallion.utils.Literals.*; 024 025import io.stallion.dataAccess.DataAccessRegistry; 026import io.stallion.dataAccess.Displayable; 027import io.stallion.dataAccess.DisplayableModelController; 028import io.stallion.restfulEndpoints.EndpointsRegistry; 029import io.stallion.services.Log; 030import io.stallion.settings.ContentFolder; 031import io.stallion.settings.Settings; 032import io.stallion.tools.Exporter; 033import io.stallion.tools.ExporterRegistry; 034import io.stallion.utils.DateUtils; 035 036 037public class ListingExporter implements Exporter { 038 public static void register() { 039 ExporterRegistry.instance().register(new ListingExporter()); 040 } 041 @Override 042 public List<String> listUrls() { 043 List<String> urlPaths = list(); 044 for (ContentFolder conf: Settings.instance().getFolders()) { 045 if (!conf.isListingEnabled()) { 046 continue; 047 } 048 String root = conf.getListingRootUrl(); 049 if (root.equals("/")) { 050 root = ""; 051 } 052 urlPaths.add(or(root, "/")); 053 urlPaths.add(root + "/rss.xml"); 054 urlPaths.add(root + "/feed"); 055 DisplayableModelController<TextItem> controller = (DisplayableModelController)DataAccessRegistry.instance().get(conf.getPath()); 056 int count = controller.filter("published", true).count(); 057 for (TextItem post: controller.filter("published", true).all()) { 058 urlPaths.add(root + "/archives/" + DateUtils.formatLocalDateFromZonedDate(post.getPublishDate(), "yyyy/MM/")); 059 for (String tag: post.getTags()) { 060 urlPaths.add("/by-tag/" + tag + "/"); 061 } 062 } 063 int pageCount = (count / conf.getItemsPerPage()) + 1; 064 for (int i = 2; i <= pageCount; i++) { 065 urlPaths.add("/page/" + i + "/"); 066 } 067 } 068 return urlPaths; 069 } 070} 071 072 073 074