XWiki
Last modified by Vincent Massol on 2013/12/09 17:26
Slides
- XWiki
- Agenda
- What is XWiki?
- Is it a first gen Wiki?
- Is it an Advanced Wiki?
- It’s a dev platform!
- XWiki Platform
- Multiple Usages
- Development Capabilities
- Scripting in Pages (1/2)
- Scripting in Pages (2/2)
- Adding MetaData
- Wiki Macros
- Skinning & Theming
- Components
- extensions.xwiki.org
- Why use XWiki?
- Long tail of Apps
- Pros (1/2)
- Pros (2/2)
- Cons
- Q&A
- Contact
XWiki
A collaborative development platform runtime based on the wiki paradigm
Vincent Massol
October 2011
Agenda
- What is XWiki?
- Development Capabilities
- Why use XWiki?
- QA
What is XWiki?
Is it a first gen Wiki?
Yes, but not only!
Is it an Advanced Wiki?
Yes, but not only!
It’s a dev platform!
XWiki Platform
... for developing (collaborative) web applications
Multiple Usages
Development Capabilities
Scripting in Pages (1/2)
{{groovy}}
@Grab(group="org.codehaus.groovy.modules.http-builder",
module="http-builder", version="0.5.1")
import groovyx.net.http.*
def http = new HTTPBuilder( "http://nexus.xwiki.org/nexus/" )
def resp = http.get( path: "service/local/repositories")
println "|=Name|=Type|=Location"
resp.data."repositories-item".each() {
println "|${it.name}|${it.repoType}|${it. contentResourceURI}"
}
{{/groovy}}
@Grab(group="org.codehaus.groovy.modules.http-builder",
module="http-builder", version="0.5.1")
import groovyx.net.http.*
def http = new HTTPBuilder( "http://nexus.xwiki.org/nexus/" )
def resp = http.get( path: "service/local/repositories")
println "|=Name|=Type|=Location"
resp.data."repositories-item".each() {
println "|${it.name}|${it.repoType}|${it. contentResourceURI}"
}
{{/groovy}}
Scripting in Pages (2/2)
{{velocity}}
#set ($xwql = "where doc.content like '%welcome%'")
#foreach ($item in $services.query.xwql($xwql).execute())
#if ($request.confirm == "1")
#set ($itemDoc = $xwiki.getDocument($item))
$itemDoc.setContent($itemDoc.getContent().replaceAll(
"welcome", "bienvenue"))
$itemDoc.save("Replaced bienvenue")
* [[$item>>$item]] replaced!
#else
* [[$item>>$item]]
#end
#end
[[Replace "welcome" by "bienvenue">>?confirm=1]]
{{/velocity}}
#set ($xwql = "where doc.content like '%welcome%'")
#foreach ($item in $services.query.xwql($xwql).execute())
#if ($request.confirm == "1")
#set ($itemDoc = $xwiki.getDocument($item))
$itemDoc.setContent($itemDoc.getContent().replaceAll(
"welcome", "bienvenue"))
$itemDoc.save("Replaced bienvenue")
* [[$item>>$item]] replaced!
#else
* [[$item>>$item]]
#end
#end
[[Replace "welcome" by "bienvenue">>?confirm=1]]
{{/velocity}}
Adding MetaData
- Ability to associate arbitrary
data to any wiki page
- Enable structure in the wiki
- Enable Application development
- Future: Application Within Minutes
Wiki Macros
Skinning & Theming
Components
@ComponentRole
public interface Macro
{
List<Block> execute();
}
public interface Macro
{
List<Block> execute();
}
@Component
@Named("message")
@Singleton
public class MessageMacro implements Macro
{
@Inject
private Execution execution;
@Inject
@Named("box")
private Macro boxMacro;
public List<Block> execute()
{
...
}
}
@Named("message")
@Singleton
public class MessageMacro implements Macro
{
@Inject
private Execution execution;
@Inject
@Named("box")
private Macro boxMacro;
public List<Block> execute()
{
...
}
}
META-INF/components.txt
org.xwiki.rendering.internal.macro.message.MessageMacro
extensions.xwiki.org
Why use XWiki?
Long tail of Apps
XWiki is the Excel of the Web!
Pros (1/2)
- Iterative, Need-based development
- Continuous Delivery
- Online immediately (no deployment needed)
- Works from day one, immediate feedbacks
Pros (2/2)
- Work collaboratively on creating applications
- Designers can style while devs create logic
- Open source
- Strong and meritocratic community
Cons
- Save code in SCM
- ... but SVN Application
- Low integration with existing dev tools
- Not an official standard
- Higher “risk”, less trained devs, etc
Q&A
Contact
Vincent Massol
[email protected]
skype: vmassol
http://about.me/vmassol