Changeset dcd6229473626901e04428944a3530f2492ded88

Show
Ignore:
Timestamp:
06/07/07 17:27:55 (1 year ago)
Author:
Christopher Jung <bktheg@web.de>
git-committer:
Christopher Jung <bktheg@web.de> 1181230075 +0200
git-parent:

[46eee675eabc62a7f42e701cc36bf056b5dcf3fc]

git-author:
Christopher Jung <bktheg@web.de> 1181230075 +0200
Message:

DS-spezifische BBCodes sind nun nicht mehr Teil des Frameworks

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • src/net/driftingsouls/ds2/server/framework/bbcode/BBCodeParser.java

    r52bce2c rdcd6229  
    1919package net.driftingsouls.ds2.server.framework.bbcode; 
    2020 
     21import java.net.URL; 
    2122import java.util.Arrays; 
     23import java.util.Enumeration; 
    2224import java.util.HashMap; 
    2325import java.util.HashSet; 
    2426import java.util.Map; 
    2527 
     28import javax.xml.parsers.DocumentBuilder; 
     29import javax.xml.parsers.DocumentBuilderFactory; 
     30 
     31import net.driftingsouls.ds2.server.framework.Common; 
     32import net.driftingsouls.ds2.server.framework.Loggable; 
     33import net.driftingsouls.ds2.server.framework.xml.XMLUtils; 
     34 
     35import org.w3c.dom.Document; 
     36import org.w3c.dom.Element; 
     37import org.w3c.dom.Node; 
     38import org.w3c.dom.NodeList; 
     39 
    2640/** 
    27  * Der BBCodeParser formatiert einen Text mittels BBCodes. Bei BBCodes 
     41 * <p>Der BBCodeParser formatiert einen Text mittels BBCodes. Bei BBCodes 
    2842 * handelt es sich um Tags in der Form [name]...[/name] oder [name] oder  
    29  * [name=parameter1,parameter2]...[/name] usw. 
    30  * Das Formatieren einzelner Tags kann dabei auch ueber Funktionen geschehen 
    31  * ({@link BBCodeFunction}). 
     43 * [name=parameter1,parameter2]...[/name] usw.</p> 
     44 * <p>Das Formatieren einzelner Tags kann dabei auch ueber Funktionen geschehen 
     45 * ({@link BBCodeFunction}).</p> 
     46 * <p>Der BBCodeParser erlaubt es neben den Framework-BBCodes auf eigene  
     47 * anwendungsspezifische BBCodes hinzuzufuegen. Diese muessen dazu in der 
     48 * Datei <code>META-INF/services/net.driftingsouls.ds2.server.framework.bbcode.BBCodeFunction</code> 
     49 * eingetragen werden. Zudem koennen zur Laufzeit weitere BBCodes registriert werden</p> 
    3250 *  
    3351 * @author Christopher Jung 
    3452 * 
    3553 */ 
    36 public class BBCodeParser
    37         private static BBCodeParser instance = null;; 
     54public class BBCodeParser implements Loggable
     55        private static BBCodeParser instance = null; 
    3856         
    3957        private Map<String,BBCodeFunction> replaceFunctions = new HashMap<String,BBCodeFunction>(); 
     
    4260        private BBCodeParser() { 
    4361                try { 
     62                        // Framework-BBCodes registrieren 
    4463                        registerHandler( "url", 1, new TagURL() ); 
    4564                        registerHandler( "url", 2, new TagURL() ); 
     
    6180                        registerHandler( "align", 2, "<div style=\"text-align:$2\">$1</div>" ); 
    6281                        registerHandler( "mark", 2, "<span style=\"background-color:$2\">$1</span>" ); 
    63                         registerHandler( "shiptype", 1, new TagShipType() ); 
    64                         registerHandler( "resource", 3, new TagResource() ); 
    65                         registerHandler( "resource", 2, new TagResource() ); 
    66                         registerHandler( "userprofile", 2, "<a class=\"profile\" href=\"ds?module=userprofile&sess={{{__SESSID__}}}&user=$2\">$1</a>" ); 
    67                         registerHandler( "userprofile", 3, "<a class=\"$3\" href=\"ds?module=userprofile&sess={{{__SESSID__}}}&user=$2\">$1</a>" ); 
    6882                        registerHandler( "hr", 0, "<hr style=\"height:1px; border:0px; background-color:#606060; color:#606060\" />" ); 
    6983                        registerHandler( "hide", 1, "" ); 
     84                         
     85                        // Weitere BBCodes aus META-INF/services/net.driftingsouls.ds2.server.framework.bbcode.BBCodeFunction lesen 
     86                        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
     87                        DocumentBuilder builder = factory.newDocumentBuilder(); 
     88                         
     89                        ClassLoader loader = Thread.currentThread().getContextClassLoader(); 
     90                        Enumeration<URL> resources = loader.getResources("META-INF/services/"+BBCodeFunction.class.getName()); 
     91                        while( resources.hasMoreElements() ) { 
     92                                URL elem = resources.nextElement(); 
     93                                 
     94                                Document doc = builder.parse(elem.openStream()); 
     95                                Element root = doc.getDocumentElement(); 
     96                                NodeList bbcodes = root.getElementsByTagName("bbcode"); 
     97                                for( int i=0; i < bbcodes.getLength(); i++ ) { 
     98                                        Element bbcode = (Element)bbcodes.item(i); 
     99                                         
     100                                        final String tag = bbcode.getAttribute("tag"); 
     101                                        final int params = Integer.parseInt(bbcode.getAttribute("params"));  
     102                                         
     103                                        if( bbcode.getAttribute("handler").length() == 0 ) { 
     104                                                String text = XMLUtils.firstChildOfType(bbcode, Node.CDATA_SECTION_NODE).getNodeValue(); 
     105                                                text = Common.trimLines(text).trim(); 
     106                                                registerHandler(tag, params, text); 
     107                                        } 
     108                                        else { 
     109                                                String cls = bbcode.getAttribute("handler"); 
     110                                                try { 
     111                                                        Class<? extends BBCodeFunction> bbcodeCls = Class.forName(cls).asSubclass(BBCodeFunction.class); 
     112                                                        registerHandler(tag, params, bbcodeCls.newInstance()); 
     113                                                } 
     114                                                catch( ClassNotFoundException e ) { 
     115                                                        LOG.warn("Konnte BBCode "+tag+"("+params+") nicht laden. Handler-Klasse '"+cls+"' nicht vorhanden"); 
     116                                                } 
     117                                        } 
     118                                } 
     119                        } 
    70120                } 
    71121                catch( Exception e ) { 
  • src/net/driftingsouls/ds2/server/framework/xml/XMLUtils.java

    r52fb569 rdcd6229  
    219219                return null; 
    220220        } 
     221         
     222        /** 
     223         * Gibt den ersten Knoten eines bestimmten Typs unterhalb eines Knotens zurueck. 
     224         * Wenn kein Knoten des Typs direkt unter dem angegebenen Knoten gefunden wird, so wird <code>null</code> 
     225         * zurueckgegeben. 
     226         *   
     227         * @param node Der Knoten unter dem gesucht werden soll 
     228         * @param type Der Typ des Knotens 
     229         * @return Der erste Knoten vom angegebenen Typ oder <code>null</code> 
     230         */ 
     231        public static Node firstChildOfType(Node node, short type) { 
     232                NodeList list = node.getChildNodes(); 
     233                for( int i=0; i < list.getLength(); i++ ) { 
     234                        if( list.item(i).getNodeType() == type) { 
     235                                return list.item(i); 
     236                        } 
     237                } 
     238                 
     239                return null; 
     240        } 
    221241} 
  • src/net/driftingsouls/ds2/server/modules/CommController.java

    r3924571 rdcd6229  
    2929 
    3030import net.driftingsouls.ds2.server.ContextCommon; 
     31import net.driftingsouls.ds2.server.bbcodes.TagIntrnlConfTask; 
    3132import net.driftingsouls.ds2.server.comm.Ordner; 
    3233import net.driftingsouls.ds2.server.comm.PM; 
     
    3940import net.driftingsouls.ds2.server.framework.bbcode.BBCodeParser; 
    4041import net.driftingsouls.ds2.server.framework.bbcode.Smilie; 
    41 import net.driftingsouls.ds2.server.framework.bbcode.TagIntrnlConfTask; 
    4242import net.driftingsouls.ds2.server.framework.db.Database; 
    4343import net.driftingsouls.ds2.server.framework.db.SQLQuery;