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

📄 patternplugin.java

📁 xwiki 源码
💻 JAVA
字号:
/**
 * ===================================================================
 *
 * Copyright (c) 2003 Ludovic Dubost, All rights reserved.
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 *
 * This program 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 General Public License for more details, published at
 * http://www.gnu.org/copyleft/gpl.html or in gpl.txt in the
 * root folder of this distribution.

 * Created by
 * User: Ludovic Dubost
 * Date: 21 janv. 2004
 * Time: 11:26:09
 */
package com.xpn.xwiki.plugin;

import com.xpn.xwiki.XWiki;
import com.xpn.xwiki.XWikiContext;
import com.xpn.xwiki.doc.XWikiDocument;
import com.xpn.xwiki.notify.DocObjectChangedRule;
import com.xpn.xwiki.notify.XWikiDocChangeNotificationInterface;
import com.xpn.xwiki.notify.XWikiNotificationRule;
import com.xpn.xwiki.objects.BaseObject;
import com.xpn.xwiki.objects.StringProperty;
import com.xpn.xwiki.render.WikiSubstitution;
import com.xpn.xwiki.util.Util;
import org.apache.ecs.filter.CharacterFilter;
import org.apache.tools.ant.util.StringUtils;

import java.util.Vector;

public class PatternPlugin extends XWikiDefaultPlugin implements XWikiDocChangeNotificationInterface {
    Vector patterns = new Vector();
    Vector results = new Vector();
    Vector descriptions = new Vector();
    WikiSubstitution patternListSubstitution;

    public PatternPlugin(String name, String className, XWikiContext context) {
        super(name, className, context);
        init(context);

        // register for any modifications of the Plugins.PatternPlugin document..
        XWiki xwiki = context.getWiki();
        xwiki.getNotificationManager().addNamedRule("Plugins.PatternPlugin",
                              new DocObjectChangedRule(this, "Plugins.PatternPlugin"));

    }

    public void init(XWikiContext context) {
        XWiki xwiki = context.getWiki();
        try {
            patterns = new Vector();
            results = new Vector();
            descriptions = new Vector();
            XWikiDocument pattern_doc = xwiki.getDocument("Plugins", "PatternPlugin", context);
            Vector patternlist = pattern_doc.getObjects("Plugins.PatternPlugin");
            if (patternlist!=null) {
            for (int i=0;i<patternlist.size();i++) {
                    BaseObject obj = (BaseObject) patternlist.get(i);
                    if (obj==null)
                        continue;
                    patterns.add(((StringProperty)obj.get("pattern")).getValue().toString());
                    results.add(((StringProperty)obj.get("result")).getValue().toString());
                    descriptions.add(((StringProperty)obj.get("description")).getValue().toString());
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        patternListSubstitution = new WikiSubstitution(context.getUtil(),"%PATTERNS%");
        // Add a notification rule if the preference property plugin is modified
    }


    public void addPattern(String pattern, String result, String description) {
        patterns.add(pattern);
        results.add(result);
        descriptions.add(description);
    }

    public String getPatternList() {
        CharacterFilter filter = new CharacterFilter();
        StringBuffer list = new StringBuffer();
        list.append("{pre}\n");
        list.append("<table border=1>");
        list.append("<tr><td><strong>Pattern</strong></td>");
        list.append("<td><strong>Result</strong></td><td><strong>Description</strong></td></tr>");
        for (int i=0;i<patterns.size();i++) {
            list.append("<tr><td>");
            list.append(filter.process((String)patterns.get(i)));
            list.append("</td><td>");
            list.append(filter.process((String)results.get(i)));
            list.append("</td><td>");
            list.append(descriptions.get(i));
            list.append("</td></tr>");
        }
        list.append("</table>");
        list.append("\n{/pre}");
        return list.toString();
    }

    public String commonTagsHandler(String line, XWikiContext context) {
        String subst = getPatternList();
        subst = StringUtils.replace(subst,"$","\\$");
        patternListSubstitution.setSubstitution(subst);
        line = patternListSubstitution.substitute(line);
        return line;
    }

    public String startRenderingHandler(String line, XWikiContext context) {
        return line;
    }

    public String outsidePREHandler(String line, XWikiContext context) {
        Util util = context.getUtil();

        for (int i=0;i<patterns.size();i++) {
         String pattern = (String) patterns.get(i);
         String result = (String) results.get(i);
         try {
           if (pattern.startsWith("s/"))
            line = util.substitute(pattern,line);
           else
            line = StringUtils.replace(line, " " + pattern, " " + result);
         } catch (Exception e) {
             // Log a error but do not fail..
         }
        }

        return line;
    }

    public String insidePREHandler(String line, XWikiContext context) {
        return line;
    }

    public String endRenderingHandler(String line, XWikiContext context) {
        return line;
    }

    public void notify(XWikiNotificationRule rule, XWikiDocument newdoc, XWikiDocument olddoc, int event, XWikiContext context) {
     // If the PatternPlugin document has been modified we need to reload the patterns
     init(context);
    }
}

⌨️ 快捷键说明

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