001: /*
002: JSPWiki - a JSP-based WikiWiki clone.
003:
004: Copyright (C) 2001-2002 Janne Jalkanen (Janne.Jalkanen@iki.fi)
005:
006: This program is free software; you can redistribute it and/or modify
007: it under the terms of the GNU Lesser General Public License as published by
008: the Free Software Foundation; either version 2.1 of the License, or
009: (at your option) any later version.
010:
011: This program is distributed in the hope that it will be useful,
012: but WITHOUT ANY WARRANTY; without even the implied warranty of
013: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
014: GNU Lesser General Public License for more details.
015:
016: You should have received a copy of the GNU Lesser General Public License
017: along with this program; if not, write to the Free Software
018: Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
019: */
020: package com.ecyrd.jspwiki.providers;
021:
022: import java.io.*;
023: import java.util.Properties;
024: import org.apache.log4j.Logger;
025:
026: import com.ecyrd.jspwiki.*;
027:
028: /**
029: * Provides a simple directory based repository for Wiki pages.
030: * <P>
031: * All files have ".txt" appended to make life easier for those
032: * who insist on using Windows or other software which makes assumptions
033: * on the files contents based on its name.
034: *
035: * @author Janne Jalkanen
036: */
037: public class FileSystemProvider extends AbstractFileProvider {
038: private static final Logger log = Logger
039: .getLogger(FileSystemProvider.class);
040: /**
041: * All metadata is stored in a file with this extension.
042: */
043: public static final String PROP_EXT = ".properties";
044:
045: public void putPageText(WikiPage page, String text)
046: throws ProviderException {
047: try {
048: super .putPageText(page, text);
049: putPageProperties(page);
050: } catch (IOException e) {
051: log.error("Saving failed");
052: }
053: }
054:
055: /**
056: * Stores basic metadata to a file.
057: */
058: private void putPageProperties(WikiPage page) throws IOException {
059: Properties props = new Properties();
060: OutputStream out = null;
061:
062: try {
063: String author = page.getAuthor();
064: String changenote = (String) page
065: .getAttribute(WikiPage.CHANGENOTE);
066:
067: if (author != null) {
068: props.setProperty("author", author);
069: }
070:
071: if (changenote != null) {
072: props.setProperty("changenote", changenote);
073: }
074:
075: File file = new File(getPageDirectory(), mangleName(page
076: .getName())
077: + PROP_EXT);
078:
079: out = new FileOutputStream(file);
080:
081: props.store(out, "JSPWiki page properties for page "
082: + page.getName());
083: } finally {
084: if (out != null)
085: out.close();
086: }
087: }
088:
089: /**
090: * Gets basic metadata from file.
091: */
092: private void getPageProperties(WikiPage page) throws IOException {
093: Properties props = new Properties();
094: InputStream in = null;
095:
096: try {
097: File file = new File(getPageDirectory(), mangleName(page
098: .getName())
099: + PROP_EXT);
100:
101: if (file.exists()) {
102: in = new FileInputStream(file);
103:
104: props.load(in);
105:
106: page.setAuthor(props.getProperty("author"));
107:
108: String changenote = props.getProperty("changenote");
109: if (changenote != null) {
110: page.setAttribute(WikiPage.CHANGENOTE, changenote);
111: }
112: }
113: } finally {
114: if (in != null)
115: in.close();
116: }
117: }
118:
119: public WikiPage getPageInfo(String page, int version)
120: throws ProviderException {
121: WikiPage p = super .getPageInfo(page, version);
122:
123: if (p != null) {
124: try {
125: getPageProperties(p);
126: } catch (IOException e) {
127: log.error("Unable to read page properties", e);
128: throw new ProviderException(
129: "Unable to read page properties, check logs.");
130: }
131: }
132:
133: return p;
134: }
135:
136: public void deletePage(String pageName) throws ProviderException {
137: super .deletePage(pageName);
138:
139: File file = new File(getPageDirectory(), mangleName(pageName)
140: + PROP_EXT);
141:
142: if (file.exists())
143: file.delete();
144: }
145:
146: public void movePage(String from, String to)
147: throws ProviderException {
148: File fromPage = findPage(from);
149: File toPage = findPage(to);
150:
151: fromPage.renameTo(toPage);
152: }
153: }
|