|
Friki example source code file (FileRepository.java)
The Friki FileRepository.java source codepackage com.efsol.friki; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.Iterator; import java.util.Arrays; import java.util.Date; import java.util.List; import java.util.Map; import java.io.File; import java.io.FilenameFilter; import java.io.Writer; import java.io.FileWriter; import java.io.IOException; import java.text.DateFormat; import java.text.SimpleDateFormat; import org.stringtree.util.tract.FileTractReader; import org.stringtree.util.tract.FileTractWriter; import org.stringtree.util.tract.Tract; public class FileRepository extends BasicDriver implements FilenameFilter { private static final DateFormat suffixFormat = new SimpleDateFormat("yyyy-MM-dd-HH.mm.ss"); private String backupDirName; private File dir; private File backup; private boolean backupChanges; private Map cache = new HashMap(); public FileRepository(Policy policy) { this.dir = policy.getFile("repository-location"); System.out.println("Friki: Created File Page Repository at '" + dir + "'"); this.backupChanges = policy.getBoolean("backupChanges"); this.backupDirName = policy.get("backupDir"); if (backupChanges && backupDirName != null) { backup = new File(dir, backupDirName); backup.mkdirs(); } cache.put("old/EmptyPage", new Page("old/EmptyPage", "There was no page version before this!")); } public String escape(String name) { return NamePreserver.escape(name); } public String unescape(String name) { return NamePreserver.unescape(name); } private File pageFile(String name) { return new File(dir, escape(name)); } private File backupFile(String name) { int prefix = backupDirName.length() + 1; String filename = name.substring(prefix); return new File(backup, escape(filename)); } public boolean validName(String name) { return (name.indexOf('.')==-1 || name.startsWith(backupDirName)) && !backupDirName.equals(name); } public boolean isReadable(String name) { return validName(name) && name.indexOf(':')==-1 && !name.startsWith("/") && !name.startsWith("\\"); } public boolean isWritable(String name) { return isReadable(name) && name.indexOf("/")==-1 && name.indexOf("\\") == -1; } protected void get(File file, Tract ret) { if (file.canRead()) { try { FileTractReader.load(ret, file, true); } catch(IOException ioe) { ioe.printStackTrace(); } } } public Tract get(String name) { if (cache.containsKey(name)) { return (Tract)cache.get(name); } Tract ret = new Page(name); File file = (name.startsWith(backupDirName)) ? backupFile(name) : pageFile(name); get(file, ret); return ret; } public void put(File file, Tract page) { try { FileTractWriter.store(page, file); } catch(IOException ioe) { ioe.printStackTrace(); } } public void put(String name, Tract page) { page.put("page.name", name); put(pageFile(name), page); } public String backup(String name) { if (backupChanges && backup != null) { Tract page = get(name); String dated = "." + suffixFormat.format(new Date()); File file = new File(backup, escape(name) + dated); put(file, page); name = backupDirName + "/" + name + dated; } return name; } public boolean contains(String name) { return validName(name) && (cache.containsKey(name) || pageFile(name).canRead()); } public boolean accept(File dir, String name) { return validName(name); } public Iterator allPageNames() { List names = Arrays.asList(dir.list(this)); List converted = new ArrayList(names.size()); Iterator allFiles = names.iterator(); while (allFiles.hasNext()) { converted.add(unescape((String)allFiles.next())); } Collections.sort(converted); return converted.iterator(); } public void append(String name, String text) { File page = pageFile(name); if (page.canWrite()) { try { Writer writer = new FileWriter(page.getAbsolutePath(), true); writer.write(text); writer.flush(); writer.close(); } catch(IOException ioe) { ioe.printStackTrace(); } } } } Other Friki examples (source code examples)Here is a short list of links related to this Friki FileRepository.java source code file: |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.