/*
* File : $Source: /alkacon/cvs/alkacon/com.alkacon.opencms.usagereport/src/com/alkacon/opencms/usagereport/CmsUpdatefeedConfig.java,v $
* Date : $Date: 2009/02/05 09:56:20 $
* Version: $Revision: 1.1 $
*
* This library is part of OpenCms -
* the Open Source Content Management System
*
* Copyright (C) 2002 - 2008 Alkacon Software (http://www.alkacon.com)
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library 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
* Lesser General Public License for more details.
*
* For further information about Alkacon Software, please see the
* company website: http://www.alkacon.com
*
* For further information about OpenCms, please see the
* project website: http://www.opencms.org
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package com.alkacon.opencms.usagereport;
import org.opencms.file.CmsObject;
import org.opencms.main.OpenCms;
import org.opencms.util.CmsStringUtil;
import org.opencms.xml.CmsXmlUtils;
import org.opencms.xml.content.CmsXmlContent;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
/**
* Serves for saving the configuration of the XML content.<p>
*
* @author Ruediger Kurz
*
* @version $Revision: 1.1 $
*/
public class CmsUpdatefeedConfig {
/** Node name in the feed XSD. */
public static final String NODE_SITEREF = "SiteRef";
/** Node name in the feed XSD. */
public static final String NODE_TITLE = "Title";
/** Node name in the feed XSD. */
public static final String NODE_DESCRIPTION = "Description";
/** Node name in the feed XSD. */
public static final String NODE_IMAGE = "Image";
/** Node name in the feed XSD. */
public static final String NODE_TYPE = "Type";
/** Node name in the feed XSD. */
public static final String NODE_TIMEFRAME = "TimeFrame";
/** Node name in the feed XSD. */
public static final String NODE_MINENTRIES = "MinEntries";
/** Node name in the feed XSD. */
public static final String NODE_MAXENTRIES = "MaxEntries";
/** Node name in the feed XSD. */
public static final String NODE_FOLDERS = "Folders";
/** Node name in the feed XSD. */
public static final String NODE_LANGGUAGES = "Languages";
/** Node name in the feed XSD. */
public static final String NODE_PERMISSIONS = "Permissions";
/** Node name in the feed XSD. */
public static final String NODE_AUTHOR = "Author";
/** Node name in the feed XSD. */
public static final String NODE_EXCLUDE = "Exclude";
/** Default value for the permissions. */
public static final String DEFAULT_PERMISSIONS = "Guest";
/** Default value for the time frame. */
public static final int DEFAULT_TIMEFRAME = 7;
/** Default value for minimum entries. */
public static final int DEFAULT_MINENTRIES = 10;
/** Default value for maximum entries. */
public static final int DEFAULT_MAXENTRIES = 25;
private String m_siteRef;
private String m_title;
private String m_description;
private CmsUpdatefeedConfigImage m_image;
private String m_type;
private int m_timeFrame;
private int m_minEntries;
private int m_maxEntries;
private List m_folders;
private String m_exclude;
private List m_languages;
private String m_permissions;
private String m_author;
/**
* The constructor reads the XML configuration file (CmsXmlContent)
* and put the values into the local variables.<p>
*
* @param cms the current users context
* @param content a CmsXmlContent with the schema AlkaconUpdatefeeds
* @param locale the locale of the XML content
*/
public CmsUpdatefeedConfig(CmsObject cms, CmsXmlContent content, Locale locale) {
String basePath = "/";
m_siteRef = content.getStringValue(cms, CmsXmlUtils.concatXpath(basePath, NODE_SITEREF), locale);
m_title = content.getStringValue(cms, CmsXmlUtils.concatXpath(basePath, NODE_TITLE), locale);
m_description = content.getStringValue(cms, CmsXmlUtils.concatXpath(basePath, NODE_DESCRIPTION), locale);
m_type = content.getStringValue(cms, CmsXmlUtils.concatXpath(basePath, NODE_TYPE), locale);
// process the feed image (if set / available)
CmsUpdatefeedConfigImage image = null;
if (content.getValue(NODE_IMAGE, locale) != null) {
String imagePath = CmsXmlUtils.createXpath(NODE_IMAGE, 1);
String title = content.getStringValue(cms, CmsXmlUtils.concatXpath(imagePath, "Title"), locale);
String description = content.getStringValue(cms, CmsXmlUtils.concatXpath(imagePath, "Description"), locale);
String url = content.getStringValue(cms, CmsXmlUtils.concatXpath(imagePath, "Url"), locale);
String link = content.getStringValue(cms, CmsXmlUtils.concatXpath(imagePath, "Link"), locale);
image = new CmsUpdatefeedConfigImage();
image.setTitle(title);
image.setDescription(description);
if (CmsStringUtil.isNotEmpty(link)) {
image.setLink(OpenCms.getLinkManager().getServerLink(cms, link));
}
if (CmsStringUtil.isNotEmpty(url)) {
image.setUrl(OpenCms.getLinkManager().getServerLink(cms, url));
}
}
m_image = image;
String timeFrameVal = content.getStringValue(cms, CmsXmlUtils.concatXpath(basePath, NODE_TIMEFRAME), locale);
m_timeFrame = -1;
if (timeFrameVal != null) {
try {
m_timeFrame = Integer.parseInt(timeFrameVal);
} catch (NumberFormatException e) {
// parsing problem, use default
}
} else {
m_timeFrame = DEFAULT_TIMEFRAME;
}
String minEntriesVal = content.getStringValue(cms, CmsXmlUtils.concatXpath(basePath, NODE_MINENTRIES), locale);
m_minEntries = -1;
if (minEntriesVal != null) {
try {
m_minEntries = Integer.parseInt(minEntriesVal);
} catch (NumberFormatException e) {
// parsing problem, use default
}
} else {
m_minEntries = DEFAULT_MINENTRIES;
}
String maxEntriesVal = content.getStringValue(cms, CmsXmlUtils.concatXpath(basePath, NODE_MAXENTRIES), locale);
m_maxEntries = -1;
if (maxEntriesVal != null) {
try {
m_maxEntries = Integer.parseInt(maxEntriesVal);
} catch (NumberFormatException e) {
// parsing problem, use default
}
} else {
m_maxEntries = DEFAULT_MAXENTRIES;
}
// process the folders
m_folders = new ArrayList();
int foldersSize = content.getValues(NODE_FOLDERS, locale).size();
for (int i = 1; i <= foldersSize; i++) {
String foldersPath = CmsXmlUtils.createXpath(NODE_FOLDERS, i);
// description format
String startfolder = content.getStringValue(
cms,
CmsXmlUtils.concatXpath(foldersPath, "Startfolder"),
locale);
String resTypes = content.getStringValue(cms, CmsXmlUtils.concatXpath(foldersPath, "ResTypes"), locale);
String contentState = content.getStringValue(
cms,
CmsXmlUtils.concatXpath(foldersPath, "ContentState"),
locale);
CmsUpdatefeedConfigFolder folder = new CmsUpdatefeedConfigFolder();
folder.setStartfolder(startfolder);
folder.setResTypes(CmsStringUtil.splitAsList(resTypes, ","));
folder.setContentState(contentState);
m_folders.add(folder);
}
// check if there are more than one folder selected
if (m_folders.size() > 1) {
checkFolder();
}
/////////////////////////////
// WHAT'S THE DEFAULT ???? //
/////////////////////////////
m_exclude = content.getStringValue(cms, CmsXmlUtils.concatXpath(basePath, NODE_EXCLUDE), locale);
if (CmsStringUtil.isEmptyOrWhitespaceOnly(m_exclude)) {
m_exclude = "";
}
m_languages = new ArrayList();
String languages = content.getStringValue(cms, CmsXmlUtils.concatXpath(basePath, NODE_LANGGUAGES), locale);
if (CmsStringUtil.isNotEmptyOrWhitespaceOnly(languages)) {
m_languages = CmsStringUtil.splitAsList(languages, ",");
}
m_permissions = content.getStringValue(cms, CmsXmlUtils.concatXpath(basePath, NODE_PERMISSIONS), locale);
if (CmsStringUtil.isEmptyOrWhitespaceOnly(m_permissions)) {
m_permissions = DEFAULT_PERMISSIONS;
}
m_author = content.getStringValue(cms, CmsXmlUtils.concatXpath(basePath, NODE_AUTHOR), locale);
if (CmsStringUtil.isEmptyOrWhitespaceOnly(m_author)) {
m_author = "";
}
}
/**
* Checks if there are any sub-folders.<p>
*
* A helping method for the constructor.<p>
*/
public void checkFolder() {
// Sort the selected folders
Collections.sort(m_folders, new CmsUpdatefeedConfigFolderCompataror());
// Create a new list for the good folders
// and add the first element of the sorted list
List good = new ArrayList();
good.add(m_folders.get(0));
// iterate through the sorted list
Iterator folIter = m_folders.iterator();
while (folIter.hasNext()) {
// save folders into folderToCheck
CmsUpdatefeedConfigFolder folderToCheck = (CmsUpdatefeedConfigFolder)folIter.next();
// go through the list of good folders
int count = good.size();
boolean isGood = false;
for (int i = 0; i < count; i++) {
// save the current folder
CmsUpdatefeedConfigFolder goodFolder = (CmsUpdatefeedConfigFolder)good.get(i);
// if the folder to check does not start with the good folder and
// is not equal to the folder to check and does't already
// exist in list of good folders, turn the isGood boolean on true
// otherwise turn it on false and break.
boolean sub = !folderToCheck.getStartfolder().startsWith(goodFolder.getStartfolder());
boolean equ = !folderToCheck.equals(goodFolder);
boolean ctc = !good.contains(folderToCheck);
if (sub && equ && ctc) {
isGood = true;
} else {
isGood = false;
break;
}
}
// if the folder is good, add it to the list of good folders
if (isGood) {
good.add(folderToCheck);
}
}
m_folders = good;
}
/**
* Returns the site-reference.<p>
*
* @return the site-reference
*/
public String getSiteRef() {
return m_siteRef;
}
/**
* Sets the site-reference.<p>
*
* @param siteRef the site-reference to set
*/
public void setSiteRef(String siteRef) {
m_siteRef = siteRef;
}
/**
* Returns the title of the feed.<p>
*
* @return the title of the feed
*/
public String getTitle() {
return m_title;
}
/**
* Sets the title of the feed.<p>
*
* @param title the title of the feed to set
*/
public void setTitle(String title) {
m_title = title;
}
/**
* Returns the description of the feed.<p>
*
* @return the description of the feed
*/
public String getDescription() {
return m_description;
}
/**
* Sets the description of the feed.<p>
*
* @param description the description of the feed to set
*/
public void setDescription(String description) {
m_description = description;
}
/**
* Returns the image of the feed.<p>
*
* @return the image of the feed
*/
public CmsUpdatefeedConfigImage getImage() {
return m_image;
}
/**
* Sets the image of the feed.<p>
*
* @param image the image of the feed to set
*/
public void setImage(CmsUpdatefeedConfigImage image) {
m_image = image;
}
/**
* Returns the type of the feed.<p>
*
* @return the type of the feed
*/
public String getType() {
return m_type;
}
/**
* Sets the type of the feed.<p>
*
* @param type the type of the feed to set
*/
public void setType(String type) {
m_type = type;
}
/**
* Returns the time frame to report on.<p>
*
* @return the time frame to report on
*/
public int getTimeFrame() {
return m_timeFrame;
}
/**
* Sets the time frame to report on.<p>
*
* @param timeFrame the time frame to set
*/
public void setTimeFrame(int timeFrame) {
m_timeFrame = timeFrame;
}
/**
* Returns the minimum number of entries.<p>
*
* @return the minimum number of entries
*/
public int getMinEntries() {
return m_minEntries;
}
/**
* Sets the minimum number of entries.<p>
*
* @param minEntries the minimum number of entries to set
*/
public void setMinEntries(int minEntries) {
m_minEntries = minEntries;
}
/**
* Returns the maximum number of entries.<p>
*
* @return the maximum number of entries
*/
public int getMaxEntries() {
return m_maxEntries;
}
/**
* Sets the maximum number of entries.<p>
*
* @param maxEntries the maximum number of entries to set
*/
public void setMaxEntries(int maxEntries) {
m_maxEntries = maxEntries;
}
/**
* Returns the folders where to create the feed from.<p>
*
* @return the folders where to create the feed from
*/
public List getFolders() {
return m_folders;
}
/**
* Sets the folders where to create the feed from.<p>
*
* @param folders the folders to set
*/
public void setFolders(List folders) {
m_folders = folders;
}
/**
* Returns the exclude property.<p>
*
* @return the exclude property
*/
public String getExclude() {
return m_exclude;
}
/**
* Sets the exclude property.<p>
*
* @param exclude the exclude property to set
*/
public void setExclude(String exclude) {
m_exclude = exclude;
}
/**
* Returns the languages to include in the feed.<p>
*
* @return the languages to include in the feed
*/
public List getLanguages() {
return m_languages;
}
/**
* Sets the languages to include in the feed.<p>
*
* @param languages the languages to set
*/
public void setLanguages(List languages) {
m_languages = languages;
}
/**
* Returns the permissions to impersonate when generating the feed.<p>
*
* @return the permissions to impersonate when generating the feed
*/
public String getPermissions() {
return m_permissions;
}
/**
* Sets the permissions to impersonate when generating the feed.<p>
*
* @param permissions the permissions to set
*/
public void setPermissions(String permissions) {
m_permissions = permissions;
}
/**
* Returns the author of a feed entry (fixed text, username macro, empty).<p>
*
* @return the author of a feed entry
*/
public String getAuthor() {
return m_author;
}
/**
* Sets the author of a feed entry (fixed text, username macro, empty).<p>
*
* @param author the author of a feed entry to set
*/
public void setAuthor(String author) {
m_author = author;
}
}