⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 filerepository.java

📁 jsp写的wiki.比较新
💻 JAVA
字号:
package 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();
			}
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -