/*
* Symphony - A modern community (forum/SNS/blog) platform written in Java.
* Copyright (C) 2012-2017, b3log.org & hacpai.com
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.b3log.symphony.model.sitemap;
import org.b3log.latke.util.Strings;
import java.util.ArrayList;
import java.util.List;
/**
* Sitemap.
*
* <p>
* See <a href="http://www.sitemaps.org/protocol.php">Sitemap XML format</a>
* for more details.
* </p>
*
* @author <a href="http://88250.b3log.org">Liang Ding</a>
* @version 1.0.1.0, Nov 15, 2016
* @since 1.6.0
*/
public final class Sitemap {
/**
* Start document.
*/
private static final String START_DOCUMENT = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
/**
* Start URL set element.
*/
private static final String START_URL_SET_ELEMENT = "<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">";
/**
* End URL set element.
*/
private static final String END_URL_SET_ELEMENT = "</urlset>";
/**
* URLs.
*/
private final List<URL> urls = new ArrayList<>();
/**
* Adds the specified url.
*
* @param url the specified url
*/
public void addURL(final URL url) {
urls.add(url);
}
@Override
public String toString() {
final StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(START_DOCUMENT);
stringBuilder.append(START_URL_SET_ELEMENT);
for (final URL url : urls) {
stringBuilder.append(url.toString());
}
stringBuilder.append(END_URL_SET_ELEMENT);
return stringBuilder.toString();
}
/**
* Sitemap URL.
*
* @author <a href="http://88250.b3log.org">Liang Ding</a>
* @version 1.0.0.0, Sep 24, 2016
* @since 1.6.0
*/
public static final class URL {
/**
* Start URL element.
*/
private static final String START_URL_ELEMENT = "<url>";
/**
* End URL element.
*/
private static final String END_URL_ELEMENT = "</url>";
/**
* Start location element.
*/
private static final String START_LOC_ELEMENT = "<loc>";
/**
* End location element.
*/
private static final String END_LOC_ELEMENT = "</loc>";
/**
* Start last modified element.
*/
private static final String START_LAST_MOD_ELEMENT = "<lastmod>";
/**
* End last modified element.
*/
private static final String END_LAST_MOD_ELEMENT = "</lastmod>";
/**
* Start change frequency element.
*/
private static final String START_CHANGE_REQ_ELEMENT = "<changefreq>";
/**
* End change frequency element.
*/
private static final String END_CHANGE_REQ_ELEMENT = "</changefreq>";
/**
* Start priority element.
*/
private static final String START_PRIORITY_ELEMENT = "<priority>";
/**
* End priority element.
*/
private static final String END_PRIORITY_ELEMENT = "</priority>";
/**
* Location.
*/
private String loc;
/**
* Last modified.
*/
private String lastMod;
/**
* Change frequency.
*/
private String changeFreq;
/**
* Priority.
*/
private String priority;
/**
* Gets the last modified.
*
* @return last modified
*/
public String getLastMod() {
return lastMod;
}
/**
* Sets the last modified with the specified last modified.
*
* @param lastMod the specified modified
*/
public void setLastMod(final String lastMod) {
this.lastMod = lastMod;
}
/**
* Gets the location.
*
* @return location
*/
public String getLoc() {
return loc;
}
/**
* Sets the location with the specified location.
*
* @param loc the specified location
*/
public void setLoc(final String loc) {
this.loc = loc;
}
/**
* Gets the change frequency.
*
* @return change frequency
*/
public String getChangeFreq() {
return changeFreq;
}
/**
* Sets the change frequency with the specified change frequency.
*
* @param changeFreq the specified change frequency
*/
public void setChangeFreq(final String changeFreq) {
this.changeFreq = changeFreq;
}
/**
* Gets the priority.
*
* @return priority
*/
public String getPriority() {
return priority;
}
/**
* Sets the priority with the specified priority.
*
* @param priority the specified priority
*/
public void setPriority(final String priority) {
this.priority = priority;
}
@Override
public String toString() {
final StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(START_URL_ELEMENT);
stringBuilder.append(START_LOC_ELEMENT);
stringBuilder.append(loc);
stringBuilder.append(END_LOC_ELEMENT);
if (!Strings.isEmptyOrNull(lastMod)) {
stringBuilder.append(START_LAST_MOD_ELEMENT);
stringBuilder.append(lastMod);
stringBuilder.append(END_LAST_MOD_ELEMENT);
}
if (!Strings.isEmptyOrNull(changeFreq)) {
stringBuilder.append(START_CHANGE_REQ_ELEMENT);
stringBuilder.append(changeFreq);
stringBuilder.append(END_CHANGE_REQ_ELEMENT);
}
if (!Strings.isEmptyOrNull(priority)) {
stringBuilder.append(START_PRIORITY_ELEMENT);
stringBuilder.append(priority);
stringBuilder.append(END_PRIORITY_ELEMENT);
}
stringBuilder.append(END_URL_ELEMENT);
return stringBuilder.toString();
}
}
}