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