Hi,
Before we start doing a wide range of Macros, I would like to suggest
that unless a Macro is part of a bigger application we store it in the
Macros space.
Macros.GoogleCalendar
Macros.Map
WDYT ?
Ludovic
--
Ludovic Dubost
Blog: http://blog.ludovic.org/
XWiki: http://www.xwiki.com
Skype: ldubost GTalk: ldubost
Hi everyone,
If you like XWiki, please nominate it for one (or more) of the
following Crunchie award categories:
1) Best Enterprise StartUp: http://crunchies.techcrunch.com/vote/?NzpYV2lraQ
2) Best Overall StartUp Of 2009: http://crunchies.techcrunch.com/vote/?MTg6WFdpa2k
3) Best International StartUp: http://crunchies.techcrunch.com/vote/?ODpYV2lraQ
You can submit one nomination per category per day until December 4th
2009 at Midnight PST.
General vote link: http://crunchies2009.techcrunch.com/vote/
Thanks a lot for your participation and support!
-Vincent
PS: About the Crunchies:
The 2009 Crunchies is our third annual competition and award ceremony
to recognize and celebrate the most compelling startups, internet and
technology innovations of the year.
- Where: the award ceremony will take place in San Francisco
- When: on Friday, January 8, 2010, at 7:30 pm
Hello,
I'm Using XWiki Enterprise 2.0.3
when i'm trying to catch the events that are triggered from rename and delete both the events are DocumentDeleteEvent. I would like to know how xwiki is differentiating both these events as i need to perform some actions depending upon the event which is triggered in my component .
In 2.0 version when i do a rename action the event which is triggered is DocumentUpdateEvent and for the delete it is DocumentDeleteEvent . Is there anything which is changed in the implementation between the two releases. i checked the release notes and there is nothing explained about this.
Can you help regarding this issue?
Regards
Durga
I created some pages in Chinese names.
Problem 1:
Ctrl + G can't find those pages.
Problem 2:
Document Index show these pages as ?????
(http://192.168.1.213:8080/xwiki/bin/view/Main/AllDocs)
I have newly installed 2.1M1 zip version running on port 8080. And
2.0.3 running side by side on port 80. 2.0.3 doesn't have such
problems.
--
-- Currahee! We stand alone together!
Hi,
I've done some XWiki profiling and it seems that the biggest bottlenecks are
Velocity template evaluating (in XWikiVelocityRenderer) and Lucene Index
Updater thread...
Did you think about using StringResourceLoader (or something similar)
instead of Velocity.evaluate()? I believe caching parsed ASTs rather than
reparsing the same strings everytime could significantly improve overall
performance.
Here you can find some interesting discussion about StringResourceLoader -->
http://www.mail-archive.com/user@velocity.apache.org/msg02135.html
Well, I'd like to give it a try. Do you know any traps/gotchas I should be
aware of?
Kind regards
Lukasz
Hi,
I'm applying Caleb's path for http://jira.xwiki.org/jira/browse/XWIKI-1082
("When renaming a page, also update the "parent" field of subpages").
We need a new signature for rename so that the rename UI can let the
user decide which document having the document being renamed as parent
needs to be updated.
Document.rename(String newDocumentName, List<String>
backlinkDocumentNames, List<String> childDocumentNames)
Here's my +1
Thanks
-Vincent
Hi
Based on this JIRA report:
http://jira.xwiki.org/jira/browse/XWIKI-4430
it would be necessary to create a new set of methods just to be able
to pass an additional parameter to the calls. Because this makes it
harder and harder to deal with Plugin I would suggest to use a
Parameter Container which could contain:
- Feed Type (Blog, Web, etc)
- Type (Query, List or Feed )
- List
or
- Query, Count and Start
or
- Feed
- Metadata
- Object Class Name
- Output Type (RSS, Atom etc)
Then we would only need 2 major methods:
- SyncdFeed getFeed( FeedParams )
- String getFeedOutput( FeedParams )
This is what I came up so far (without the Feed Type):
/**
* @see #getBlogFeed(String, int, int, Map)
* @see #getFeedOutput(SyndFeed, String)
*/
public String getBlogFeedOutput( FeedParams params)
{
SyndFeed feed = getBlogFeed( params );
String ret = getFeedOutput( feed, params.getOutputType() );
return ret;
}
public SyndFeed getBlogFeed( FeedParams params)
{
Map<String, Object> myMetaData = Collections.emptyMap();
if( params.getMetaData() != null ) {
myMetaData = params.getMetaData();
}
Map<String, Object> blogMappings = null;
if( params.getObjectClassName() == null ) {
blogMappings = BLOG_FIELDS_MAPPING;
} else {
blogMappings = new HashMap<String, Object>();
blogMappings.put(SyndEntryDocumentSource.FIELD_TITLE,
params.getObjectClassName() + "_title");
blogMappings.put
(SyndEntryDocumentSource.FIELD_DESCRIPTION, params.getObjectClassName
() + "_content");
blogMappings.put
(SyndEntryDocumentSource.FIELD_CATEGORIES, params.getObjectClassName()
+ "_category");
blogMappings.put(SyndEntryDocumentSource.CONTENT_LENGTH,
new Integer(400));
}
SyndFeed blogFeed = null;
if( params.getType() == FeedParams.Type.QUERY ) {
String query = params.getQuery();
if (query == null) {
XWikiRequest request = getXWikiContext().getRequest();
String category = request.getParameter("category");
if (category == null || category.equals("")) {
query =
", BaseObject as obj where
obj.name=doc.fullName and obj.className='" + BLOG_POST_CLASS_NAME + "'
and obj.name<>'" + BLOG_POST_TEMPLATE_NAME + "' order by
doc.creationDate desc";
} else {
query =
", BaseObject as obj, DBStringListProperty as
prop join prop.list list where obj.name=doc.fullName and
obj.className='" + BLOG_POST_CLASS_NAME + "' and obj.name<>'" +
BLOG_POST_TEMPLATE_NAME + "' and obj.id=prop.id.id and
prop.id.name='category' and list = '"
+ category + "' order by doc.creationDate
desc";
}
}
blogFeed = getFeed(
query, params.getCount(), params.getStart(),
getSyndEntrySource(SyndEntryDocumentSource.class.getName(),
blogMappings), Collections.EMPTY_MAP, fillBlogFeedMetadata(myMetaData)
);
} else {
blogFeed = getFeed(
params.getEntries(), getSyndEntrySource
(SyndEntryDocumentSource.class.getName(), blogMappings),
Collections.EMPTY_MAP, fillBlogFeedMetadata(myMetaData)
// params.getEntries(), getSyndEntrySource
(SyndEntryDocumentSource.class.getName(), blogMappings), myMetaData,
fillBlogFeedMetadata(myMetaData)
);
}
if (blogFeed != null) {
blogFeed.setImage(getDefaultFeedImage());
}
return blogFeed;
}
public static class FeedParams {
public enum Type {
QUERY,
LIST
}
private static final String DEFAULT_OUTPUT_TYPE = "rss_2.0";
private static final int DEFAULT_COUNT = 10;
private static final int DEFAULT_START = 0;
private Type type;
private List<Object> entries;
private String query;
private int count = DEFAULT_COUNT;
private int start = DEFAULT_START;
private Map<String, Object> metaData;
private String outputType = DEFAULT_OUTPUT_TYPE;
private String objectClassName;
public FeedParams( List<Object> entries, String
objectClassName, Map<String, Object> metaData, String outputType ) {
this.type = Type.LIST;
this.entries = entries;
this.metaData = metaData;
this.outputType = outputType == null ?
DEFAULT_OUTPUT_TYPE : outputType;
this.objectClassName = objectClassName;
}
public FeedParams( String query, Integer count, Integer
start, String objectClassName, Map<String, Object> metaData, String
outputType ) {
this.type = Type.QUERY;
this.count = count == null ? DEFAULT_COUNT : count;
this.start = start == null ? DEFAULT_START: start;
this.metaData = metaData;
this.outputType = outputType == null ?
DEFAULT_OUTPUT_TYPE : outputType;
this.objectClassName = objectClassName;
}
public Type getType() {
return type;
}
public String getQuery() {
return query;
}
public int getCount() {
return count;
}
public int getStart() {
return start;
}
public List<Object> getEntries() {
return entries;
}
public Map<String, Object> getMetaData() {
return metaData;
}
public String getOutputType() {
return outputType;
}
public String getObjectClassName() {
return objectClassName;
}
}
What do you think?
-Andy