📄 pagerepository.java
字号:
package com.efsol.friki;
import java.util.List;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Date;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import org.stringtree.factory.Container;
import org.stringtree.factory.Repository;
import org.stringtree.factory.TractFetcher;
import org.stringtree.factory.TractStorer;
import org.stringtree.util.StringUtils;
import org.stringtree.util.tract.Tract;
public class PageRepository
implements TractFetcher, TractStorer, Repository, Container
{
protected static DateFormat df = new SimpleDateFormat("dd MMMM yyyy");
protected RepositoryDriver driver;
public PageRepository(RepositoryDriver driver)
{
this.driver = driver;
}
public Object getObject(String name)
{
Tract page = null;
if (driver.isReadable(name))
{
page = driver.get(name);
}
if (page == null)
{
page = new Page(name);
}
return page;
}
public Tract get(String name)
{
Tract ret = (Tract)getObject(name);
if (ret == null)
{
ret = new Page(name);
}
ret.put("escaped.name", escape(name));
return ret;
}
public void put(String name, Tract page, boolean backup)
{
if (driver.isWritable(name))
{
if (backup)
{
String previous = driver.backup(name);
page.put("previous.version", previous);
}
page.put("last.edit", df.format(new Date()));
driver.put(name, page);
}
}
public void put(String name, Tract page)
{
put(name, page, true);
}
public void put(String name, Object obj)
{
if (obj instanceof Tract)
{
put(name, (Tract)obj, false);
}
else
{
System.out.println("Warning. Attempt to put unrecognized object '" + obj + "' into page repository");
}
}
public Iterator matchingPages(String pattern)
{
if (StringUtils.isBlank(pattern))
{
return driver.allPageNames();
}
List ret = new ArrayList();
Iterator all = driver.allPageNames();
while (all.hasNext())
{
String name = (String)all.next();
if (name.indexOf(pattern) >= 0)
{
ret.add(name);
}
else
{
Tract page = driver.get(name);
if (page != null)
{
String content = page.getContent();
if (content != null && content.indexOf(pattern) >= 0)
{
ret.add(name);
}
}
}
}
return ret.iterator();
}
public Iterator allPageNames()
{
return driver.allPageNames();
}
public void append(String pageName, String text)
{
Tract page = get(pageName);
page.setContent(page.getContent() + text);
put(pageName, page, false);
}
public void remove(String name)
{
driver.remove(name);
}
public void clear()
{
driver.clear();
}
public boolean contains(String name)
{
return driver.contains(name);
}
public String escape(String name)
{
return driver.escape(name);
}
public String unescape(String name)
{
return driver.unescape(name);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -