incubator-jspwiki-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Janne Jalkanen <Janne.Jalka...@ecyrd.com>
Subject Re: Embedding JSPWiki 2.6
Date Tue, 05 Aug 2008 21:47:57 GMT

Might be a good idea to add these limitations to the javadocs...   
Thanks for letting us know!

/Janne

On 6 Aug 2008, at 00:45, andreak wrote:

>
> Found the error. It turned out I had to return a non-null String from
> getProviderInfo() and non-null Collection from getAllPages().
> Usage of the class is:
> String wikiMarkup = "my __wiki-markup__";
> String html = SimpleWikiRenderer.render(wikiMarkup);
>
> The class I use is this:
>
> import com.ecyrd.jspwiki.WikiContext;
> import com.ecyrd.jspwiki.WikiEngine;
> import com.ecyrd.jspwiki.WikiPage;
> import com.ecyrd.jspwiki.WikiException;
> import com.ecyrd.jspwiki.PageManager;
> import com.ecyrd.jspwiki.WikiSession;
> import com.ecyrd.jspwiki.QueryItem;
> import com.ecyrd.jspwiki.NoRequiredPropertyException;
> import com.ecyrd.jspwiki.diff.DifferenceManager;
> import com.ecyrd.jspwiki.diff.TraditionalDiffProvider;
> import com.ecyrd.jspwiki.diff.DiffProvider;
> import com.ecyrd.jspwiki.providers.WikiPageProvider;
> import com.ecyrd.jspwiki.providers.ProviderException;
> import com.ecyrd.jspwiki.parser.MarkupParser;
> import com.ecyrd.jspwiki.parser.JSPWikiMarkupParser;
> import com.ecyrd.jspwiki.parser.WikiDocument;
> import com.ecyrd.jspwiki.render.WikiRenderer;
> import com.ecyrd.jspwiki.render.XHTMLRenderer;
> import com.ecyrd.jspwiki.auth.AuthenticationManager;
> import com.ecyrd.jspwiki.auth.AuthorizationManager;
> import com.ecyrd.jspwiki.auth.Authorizer;
> import com.ecyrd.jspwiki.auth.WikiSecurityException;
>
> import java.util.Properties;
> import java.util.Collection;
> import java.util.Date;
> import java.util.List;
> import java.util.Collections;
> import java.io.StringReader;
> import java.io.IOException;
> import java.security.Principal;
>
> public class SimpleWikiRenderer {
>
>     protected static WikiEngine sEngine;
>     protected static WikiContext sContext;
>
>     static {
> 	    Properties props = new Properties();
> 	    props.setProperty(PageManager.PROP_PAGEPROVIDER,
> 	                      DummyPageProvider.class.getName());
> 	    props.setProperty(AuthenticationManager.PROP_SECURITY, "off");
>
> 	    try {
> 		    sEngine = new WikiEngine(props);
> 		    sContext = new WikiContext(sEngine, new WikiPage(sEngine,
> 		                                                     "dummy"));
> 	    }
> 	    catch (WikiException e) {
> 		    e.printStackTrace();
> 	    }
>     }
>
> 	public static String render(String wikiMarkup) throws IOException {
> 		// Create new parser and parse the content into a WikiDocument
> 		MarkupParser parser = new JSPWikiMarkupParser(sContext, new
> 			StringReader(wikiMarkup));
> 		WikiDocument doc = parser.parse();
>
> 		// We now create a new WikiRenderer
> 		WikiRenderer rend = new XHTMLRenderer(sContext, doc);
>
> 		//  Now, do the rendering.
> 		return rend.getString();
> 	}
>
> 	public static class DummyPageProvider implements WikiPageProvider {
> 		public void putPageText(WikiPage wikiPage, String s) throws
> ProviderException {
> 		}
>
> 		public boolean pageExists(String s) {
> 			return false;  //To change body of implemented methods use File |
> Settings | File Templates.
> 		}
>
> 		public Collection findPages(QueryItem[] queryItems) {
> 			return null;  //To change body of implemented methods use File |  
> Settings
> | File Templates.
> 		}
>
> 		public WikiPage getPageInfo(String s, int i) throws  
> ProviderException {
> 			return null;  //To change body of implemented methods use File |  
> Settings
> | File Templates.
> 		}
>
> 		public Collection getAllPages() throws ProviderException {
> 			return Collections.EMPTY_LIST;
> 		}
>
> 		public Collection getAllChangedSince(Date date) {
> 			return null;  //To change body of implemented methods use File |  
> Settings
> | File Templates.
> 		}
>
> 		public int getPageCount() throws ProviderException {
> 			return 0;  //To change body of implemented methods use File |  
> Settings |
> File Templates.
> 		}
>
> 		public List getVersionHistory(String s) throws ProviderException {
> 			return null;  //To change body of implemented methods use File |  
> Settings
> | File Templates.
> 		}
>
> 		public String getPageText(String s, int i) throws  
> ProviderException {
> 			return null;  //To change body of implemented methods use File |  
> Settings
> | File Templates.
> 		}
>
> 		public void deleteVersion(String s, int i) throws  
> ProviderException {
> 		}
>
> 		public void deletePage(String s) throws ProviderException {
> 		}
>
> 		public void movePage(String s, String s1) throws ProviderException {
> 		}
>
> 		public void initialize(WikiEngine wikiEngine, Properties properties)
> throws NoRequiredPropertyException, IOException {
> 		}
>
> 		public String getProviderInfo() {
> 			return DummyPageProvider.class.getName();
> 		}
> 	}
>
> }
>
>
> andreak wrote:
>>
>> I'm not having any luck with embedding JSPWiki. I've created a  
>> class like
>> Ethan suggests, with dummy (empty stubs) of DummyAuthorizer  
>> (implements
>> com.ecyrd.jspwiki.auth.Authorizer) and DummyPageProvider (implements
>> WikiPageProvider). After running a test I'm getting:
>> - *******************************************
>> - JSPWiki 2.6.1 starting. Whee!
>> - JSPWiki working directory is '/tmp/JSPWiki-'
>> - Registering plugins
>> - Using difference provider: TraditionalDiffProvider
>> - No attachment provider defined - disabling attachment support.
>> - Lucene enabled, cache will be in: /tmp/JSPWiki-/lucene
>> Starting up background thread: JSPWiki Lucene Indexer.
>> Starting up background thread: WatchDog for 'JSPWiki'.
>> - Files found in Lucene directory, not reindexing.
>> - Registering editor modules
>> - Attempting to load group database class
>> com.ecyrd.jspwiki.auth.authorize.XMLGroupDatabase
>> - XML group database property jspwiki.xmlGroupDatabaseFile not found;
>> trying /home/andreak/dev/uno/trunk/IDEAProject/WEB-INF/ 
>> groupdatabase.xml
>> - XML group database at
>> /home/andreak/dev/uno/trunk/IDEAProject/WEB-INF/groupdatabase.xml
>> - Group database not found; creating from scratch...
>> - Group database initialized.
>> - Group database not found; creating from scratch...
>> - Authorizer GroupManager initialized successfully; loaded 0 group 
>> (s).
>> - Using JDK 1.5 Platform MBeanServer
>> - com.sun.jmx.mbeanserver.JmxMBeanServer
>> - DefaultDomain
>> - Registered new admin bean Core bean
>> - Registered new admin bean User administration
>> - Registered new admin bean Search manager
>> - Registered new admin bean Plugins
>> - Registered new admin bean WikiWizard
>> - Registered new admin bean Plain editor
>> - Registering filters
>> - Cannot find property file for filters (this is okay, expected to  
>> find it
>> as: '/WEB-INF/filters.xml')
>> - Rendering content with com.ecyrd.jspwiki.render.XHTMLRenderer.
>> - Failed to start managers.
>> java.lang.NullPointerException
>> 	at java.util.ArrayList.addAll(ArrayList.java:472)
>> 	at com.ecyrd.jspwiki.WikiEngine.initReferenceManager 
>> (WikiEngine.java:659)
>> 	at com.ecyrd.jspwiki.WikiEngine.initialize(WikiEngine.java:569)
>> 	at com.ecyrd.jspwiki.WikiEngine.<init>(WikiEngine.java:359)
>> 	at
>> no.officenet.uno.util.SimpleWikiRenderer.<clinit> 
>> (SimpleWikiRenderer.java:48)
>> 	at
>> no.officenet.uno.util.SimpleWikiRendererTest.testWiki 
>> (SimpleWikiRendererTest.java:8)
>> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>> 	at
>> sun.reflect.NativeMethodAccessorImpl.invoke 
>> (NativeMethodAccessorImpl.java:39)
>> 	at
>> sun.reflect.DelegatingMethodAccessorImpl.invoke 
>> (DelegatingMethodAccessorImpl.java:25)
>> 	at java.lang.reflect.Method.invoke(Method.java:597)
>> 	at junit.framework.TestCase.runTest(TestCase.java:154)
>> 	at junit.framework.TestCase.runBare(TestCase.java:127)
>> 	at junit.framework.TestResult$1.protect(TestResult.java:106)
>> 	at junit.framework.TestResult.runProtected(TestResult.java:124)
>> 	at junit.framework.TestResult.run(TestResult.java:109)
>> 	at junit.framework.TestCase.run(TestCase.java:118)
>> 	at junit.textui.TestRunner.doRun(TestRunner.java:116)
>> 	at
>> com.intellij.rt.execution.junit.IdeaTestRunner.doRun 
>> (IdeaTestRunner.java:65)
>> 	at junit.textui.TestRunner.doRun(TestRunner.java:109)
>> 	at
>> com.intellij.rt.execution.junit.IdeaTestRunner.startRunnerWithArgs 
>> (IdeaTestRunner.java:24)
>> com.ecyrd.jspwiki.WikiException: Failed to start managers: null
>> 	at com.ecyrd.jspwiki.WikiEngine.initialize(WikiEngine.java:582)
>> 	at com.ecyrd.jspwiki.WikiEngine.<init>(WikiEngine.java:359)
>> 	at
>> no.officenet.uno.util.SimpleWikiRenderer.<clinit> 
>> (SimpleWikiRenderer.java:48)
>> 	at
>> no.officenet.uno.util.SimpleWikiRendererTest.testWiki 
>> (SimpleWikiRendererTest.java:8)
>>
>>
>> Janne Jalkanen wrote:
>>>
>>>
>>> Aside from the fact that the PageFilter interface has changed (minor
>>> modifications necessary, you will see when you compile it), you
>>> should be fine.  If you are not, please let us know so those can be
>>> documented.
>>>
>>> /Janne
>>>
>>> On 5 Jan 2008, at 22:41, Ethan Larson wrote:
>>>
>>>> Thanks again - that worked.  Just one other question: will there be
>>>> anything different about my filter/plugin setup, or can I follow
>>>> the same setup outlined in the documentation?
>>>>
>>>> Cheers,
>>>> Ethan
>>>>
>>>> P.S. - Here's my code in case anyone else wants to get this
>>>> working.  If anyone sees something wrong or a way to optimize it,
>>>> please let me know:
>>>>
>>>> public class SimpleJSPWikiRenderer {
>>>>
>>>>    protected static WikiEngine sEngine;
>>>>    protected static WikiContext sContext;
>>>>
>>>>    static {
>>>>        Properties props = new Properties();
>>>>        props.setProperty(PageManager.PROP_PAGEPROVIDER,
>>>> DummyPageProvider.class.getName());
>>>>        props.setProperty(AuthorizationManager.PROP_AUTHORIZER,
>>>> DummyAuthorizer.class.getName());
>>>>        props.setProperty(AuthenticationManager.PROP_SECURITY,  
>>>> "off");
>>>>
>>>>        try {
>>>>            sEngine = new WikiEngine(props);
>>>>            sContext = new WikiContext(sEngine, new WikiPage
>>>> (sEngine, "dummy"));
>>>>        }
>>>>        catch (WikiException e) {
>>>>            e.printStackTrace();
>>>>        }
>>>>    }
>>>>
>>>>    public static String render(String wikiMarkup) throws  
>>>> IOException {
>>>>        // Create new parser and parse the content into a  
>>>> WikiDocument
>>>>        MarkupParser parser = new JSPWikiMarkupParser(sContext, new
>>>> StringReader(wikiMarkup));
>>>>        WikiDocument doc = parser.parse();
>>>>
>>>>        // We now create a new WikiRenderer
>>>>        WikiRenderer rend = new XHTMLRenderer(sContext, doc);
>>>>
>>>>        //  Now, do the rendering.
>>>>        return rend.getString();
>>>>    }
>>>> }
>>>>
>>>> Janne Jalkanen wrote:
>>>>>
>>>>> Oh, and by the way, it's cleaner to directly hit the
>>>>> RenderingManager.  See the following article for details:
>>>>>
>>>>> http://www.jspwiki.org/wiki/MarkupParser
>>>>>
>>>>> /Janne
>>>>>
>>>>> On Jan 4, 2008, at 08:21 , Ethan Larson wrote:
>>>>>
>>>>>> Ok, I created a dummy page provider and a dummy authorizer and I
>>>>>> got a lot farther. I don't even need a MemoryPageProvider since I
>>>>>> all I need is the output (thanks just the same Florian - it was
>>>>>> instructive).  I actually got translated output.  The problem is
>>>>>> that I had to modify the source code to do it.  I had to comment
>>>>>> out line 532 of WikiEngine:
>>>>>>
>>>>>> //m_authorizationManager.initialize( this, props );
>>>>>>
>>>>>> As near as I can tell, there's no way to create an authorization
>>>>>> manager that doesn't involve a jspwiki.policy under WEB-INF.
>>>>>> However, since I'm running it as a standalone app, I don't have a
>>>>>> web container and therefore no WEB-INF.  I could create this
>>>>>> under the working directory, but I really don't want to put
>>>>>> blank, unused metadata in my app.  Is there any way to configure
>>>>>> this such that I can start the authorization manager without a
>>>>>> jspwiki.policy?
>>>>>>
>>>>>> On a broader note, I'd be over the moon if this were an easier
>>>>>> process.  JSPWiki seems to be the most actively developed and
>>>>>> feature-rich Java wiki there is, and has support for plugins and
>>>>>> filters which I will eventually need.  If there were an easy way
>>>>>> to run the wiki translation, complete with plugins and filters,
>>>>>> that didn't involve a web container and any extra memory/disk
>>>>>> usage, it could broaden the usage quite a bit.  I've looked at
>>>>>> other java wiki translators out there, and none of them are doing
>>>>>> a good job of the features/active development/ease of standalone
>>>>>> combo (Radeox, Bliki, VQWiki to name a few).  Other forum/mailing
>>>>>> list posts confirm there is a demand.
>>>>>>
>>>>>> Thanks for all your help,
>>>>>> Ethan
>>>>>>
>>>>>> P.S. -- Here's my current code for anyone reading this in the
>>>>>> future:
>>>>>>
>>>>>> Properties props = new Properties();
>>>>>> props.setProperty(PageManager.PROP_PAGEPROVIDER,
>>>>>> MyPageProvider.class.getName());
>>>>>> props.setProperty(AuthorizationManager.PROP_AUTHORIZER,
>>>>>> MyAuthorizer.class.getName());
>>>>>>
>>>>>> WikiEngine engine = new WikiEngine(props);
>>>>>>
>>>>>> WikiContext context = new WikiContext(engine, new WikiPage
>>>>>> (engine, "test"));
>>>>>>
>>>>>> System.out.println("output: \n" + engine.textToHTML(context,
>>>>>> "this is a test\n\n* more stuff"));
>>>>>>
>>>>>>
>>>>>> MyPageProvider and MyAuthorizer are both empty implentations of
>>>>>> the interfaces.  Just return an empty List for
>>>>>> MyPageProvider.getAllPages.
>>>>>>
>>>>>>
>>>>>> Janne Jalkanen wrote:
>>>>>>>
>>>>>>> Yup, the problem is that there needs to be *some* kind of a page
>>>>>>> provider, because the system needs to check if e.g. a page
>>>>>>> exists or not when it encounters a link.  The generated HTML
>>>>>>> differs in each case.
>>>>>>>
>>>>>>> A dummy provider will do just fine, e.g. the MemoryPageProvider.
>>>>>>>
>>>>>>> /Janne
>>>>>>>
>>>>>>> On Jan 2, 2008, at 00:23 , Florian Holeczek wrote:
>>>>>>>
>>>>>>>> Hi Ethan,
>>>>>>>>
>>>>>>>> maybe this can help you:
>>>>>>>> http://www.jspwiki.org/wiki/MemoryPageProvider
>>>>>>>>
>>>>>>>> Regards,
>>>>>>>>  Florian
>>>>>>>>
>>>>>>>>> The problem with the page directory is that I don't want
one.
>>>>>>>>> I will
>>>>>>>>> be managing the input/output of the text myself. I really
just
>>>>>>>>> want
>>>>>>>>> to give some wiki markup to the parser and get back html.
Is
>>>>>>>>> there
>>>>>>>>> currently a way to do this?
>>>>>>>>
>>>>>>>
>>>>>
>>>>>
>>>
>>>
>>
>
> -- 
> View this message in context: http://www.nabble.com/Embedding- 
> JSPWiki-2.6-tp14553249p18840560.html
> Sent from the JspWiki - User mailing list archive at Nabble.com.


Mime
View raw message