Hi Marius,
Thank you for your help! I am quite touched you actually tried to load the
Mail example in Xwiki page. I followed your code in the 1.6 version. Here is
the screenshot link:
http://picasaweb.google.com/lh/sredir?uname=freeleons&target=PHOTO&id=53904…
It seems works on Firefox (It is clickable but still something broken
maybe it is the sizing not right) it does not work on Google Chrome at all.
At the top of the page Firefox can display it well Chrome will display
nothing. At the bottom of the page both on Chrome and Firefox will display
these:
//
xwe.onInjectionDone('xwe')
//
//
xwe.onInjectionDone('xwe')
//
//
xwe.onInjectionDone('xwe')
//
//
xwe.onInjectionDone('xwe')
//
Here is the screenshot:
http://picasaweb.google.com/lh/sredir?uname=freeleons&target=PHOTO&id=53904…
It completely broken and nothing clickable. Later I found the srollbar
disable because this line in the Mail source
code: Window.enableScrolling(false);
Thank you for your help so I can get this far. Do you know why the the Mail
appear both at the very top of the page and also at the very bottom of the
page, and the bottom is completely broken? The mail.nocache.js successfully
loaded according to firebug.
And here is my code:
public void onModuleLoad() {
loadingUI();
}
private void loadingUI(){
String hookId = "DR_TreeView";
Element hook = DOM.getElementById(hookId);
if (hook == null) {
return;
}
// Prepare the DOM
Element container = DOM.createDiv();
String containerId = hookId + "_container";
container.setId(containerId);
hook.getParentElement().replaceChild(container, hook);
DockPanel outer = initialUI();
RootPanel.get(containerId).add(outer);
// Call the window resized handler to get the initial sizes setup.
Doing
// this in a deferred command causes it to occur after all widgets'
sizes
// have been computed by the browser.
DeferredCommand.addCommand(new Command() {
public void execute() {
onWindowResized(Window.getClientWidth(),
Window.getClientHeight());
}
});
onWindowResized(Window.getClientWidth(), Window.getClientHeight());
}
Thank you a lot!
-Leon
Hi, there,
I'm running the sanity check script on mysql 5.0.54 and there are some
queries return results. To correct these problems, should I simply just
delete these results or I need to do something else before the deletion?
Take an example, for the following query:
select * from xwikiproperties,xwikilargestrings where
xwp_classtype='com.xpn.xwiki.objects.StringListProperty' and
xwp_name=xwl_name and xwp_id=xwl_id
+---------+-----------------+--------------------------------------+---------+-----------------+---------------------------------------------
| XWP_ID | XWP_NAME | XWP_CLASSTYPE | XWL_ID | XWL_NAME | XWL_VALUE
+---------+-----------------+--------------------------------------+---------+-----------------+---------------------------------------------
| -1877168607 | subscribedDocuments |
com.xpn.xwiki.objects.StringListProperty | -1877168607 | subscribedDocuments
| Main.WebSearch|Main.Categories
| 261169163 | subscribedDocuments | com.xpn.xwiki.objects.StringListProperty
| 261169163 | subscribedDocuments | Service
Measurements.WebHome|IMProcess.WebHome
| 683557787 | subscribedWebs | com.xpn.xwiki.objects.StringListProperty |
683557787 | subscribedWebs | Replication
| 683557787 | subscribedDocuments | com.xpn.xwiki.objects.StringListProperty
| 683557787 | subscribedDocuments | IIS.WebHome
I've got couple hundred lines of records like this. If I delete all these
records, what kind of impact will be to my content?
Thank you very much for your help
--
View this message in context: http://n2.nabble.com/Help-About-Sanity-Check-tp3670302p3670302.html
Sent from the XWiki- Dev mailing list archive at Nabble.com.
jvdrean (SVN) wrote:
> Author: jvdrean
> Date: 2009-08-25 15:03:08 +0200 (Tue, 25 Aug 2009)
> New Revision: 22900
>
> Added:
> platform/xwiki-plugins/trunk/watchlist/src/main/java/com/xpn/xwiki/plugin/watchlist/WatchListEvent.java
> platform/xwiki-plugins/trunk/watchlist/src/main/java/com/xpn/xwiki/plugin/watchlist/WatchListEventManager.java
> platform/xwiki-plugins/trunk/watchlist/src/main/java/com/xpn/xwiki/plugin/watchlist/WatchListEventType.java
> platform/xwiki-plugins/trunk/watchlist/src/main/java/com/xpn/xwiki/plugin/watchlist/WatchListJob.java
> platform/xwiki-plugins/trunk/watchlist/src/main/java/com/xpn/xwiki/plugin/watchlist/WatchListJobManager.java
> platform/xwiki-plugins/trunk/watchlist/src/main/java/com/xpn/xwiki/plugin/watchlist/WatchListNotifier.java
> platform/xwiki-plugins/trunk/watchlist/src/main/java/com/xpn/xwiki/plugin/watchlist/WatchListStore.java
> Removed:
> platform/xwiki-plugins/trunk/watchlist/src/main/java/com/xpn/xwiki/plugin/watchlist/WatchListJob.java
> Modified:
> platform/core/trunk/xwiki-core/src/main/resources/ApplicationResources.properties
> platform/xwiki-applications/trunk/watchlist/src/main/resources/XWiki/WatchListManager.xml
> platform/xwiki-applications/trunk/watchlist/src/main/resources/XWiki/WatchListMessage.xml
> platform/xwiki-plugins/trunk/watchlist/pom.xml
> platform/xwiki-plugins/trunk/watchlist/src/main/java/com/xpn/xwiki/plugin/watchlist/WatchListPlugin.java
> platform/xwiki-plugins/trunk/watchlist/src/main/java/com/xpn/xwiki/plugin/watchlist/WatchListPluginApi.java
> Log:
> XPWATCHLIST-55 : Make the watchlist plugin use the activitystream plugin to retrieve events
> XPWATCHLIST-23 : Put the classes and objects diffs in the emails.
> XPWATCHLIST-34 : Exception in log for user not having watch list data
> XPWATCHLIST-35 : Watch list should support registering for full wikis
> XPWATCHLIST-40 : Watch list should support any interval for its notifications
> XPWATCHLIST-27 : WatchList send an exception by mail
>
> Modified: platform/core/trunk/xwiki-core/src/main/resources/ApplicationResources.properties
> ===================================================================
> --- platform/core/trunk/xwiki-core/src/main/resources/ApplicationResources.properties 2009-08-25 12:55:58 UTC (rev 22899)
> +++ platform/core/trunk/xwiki-core/src/main/resources/ApplicationResources.properties 2009-08-25 13:03:08 UTC (rev 22900)
> @@ -837,6 +837,10 @@
> watchlist.delete.ko=An error occurred while removing {0} from watchlist
> watchlist.create.object=Created WatchList storage object
> watchlist.save.object=Updated WatchList
> +watchlist.event.create=On {0}, the document has been created by {1}
> +watchlist.event.delete=On {0}, the document has been deleted by {1}
> +watchlist.event.update=On {0}, the document has been modified by {1}
> +watchlist.event.update.multiple=Between {0} and {1}, the document has been modified {2} times, by {3} user(s): {4}
/\ /\ /\
Replaced user(s) with: user{3,choice,0#s|1#|2#s}.
> Added: platform/xwiki-plugins/trunk/watchlist/src/main/java/com/xpn/xwiki/plugin/watchlist/WatchListEvent.java
> ===================================================================
> --- platform/xwiki-plugins/trunk/watchlist/src/main/java/com/xpn/xwiki/plugin/watchlist/WatchListEvent.java (rev 0)
> +++ platform/xwiki-plugins/trunk/watchlist/src/main/java/com/xpn/xwiki/plugin/watchlist/WatchListEvent.java 2009-08-25 13:03:08 UTC (rev 22900)
> @@ -0,0 +1,504 @@
Why do we need both prefixedSpace and prefixedFullName? Can't we obtain
the first from the latter?
> + /**
> + * Prefixed space in which the event happened.
> + */
> + private final String prefixedSpace;
> +
> + /**
> + * Prefixed document fullName in which the event happened.
> + */
> + private final String prefixedFullName;
I prefer enums for this. Is there a good reason why this is a String?
> + /**
> + * Type of the event (example: "update").
> + */
> + private String type;
> +
I don't like three lists that must be iterated in parallel. Why not a
single lists with a custom data object?
> +
> + /**
> + * List of versions affected by this event. It will contain only one entry if the event is not a composite event.
> + */
> + private List<String> versions;
> +
> + /**
> + * List of authors for this event. It will contain only one entry if the event is not a composite event.
> + */
> + private List<String> authors;
> +
> + /**
> + * List of dates for this event. It will contain only one entry if the event is not a composite event.
> + */
> + private List<Date> dates;
> +
> + /**
> + * Constructor.
> + *
> + * @param activityEvent activity stream event to wrap
> + */
> + public WatchListEvent(ActivityEvent activityEvent)
> + {
> + this.activityEvents.add(activityEvent);
> + type = activityEvent.getType();
> + prefixedSpace = activityEvent.getWiki() + WatchListStore.WIKI_SPACE_SEP + activityEvent.getSpace();
> + prefixedFullName = activityEvent.getWiki() + WatchListStore.WIKI_SPACE_SEP + activityEvent.getPage();
I'd move this piece of code in a separate method.
> + int hash = 3;
> + if (ActivityEventType.UPDATE.equals(activityEvent)) {
> + hashCode = 42 * hash + prefixedFullName.hashCode() + activityEvent.getType().hashCode();
> + } else {
> + hashCode =
> + 42 * hash + prefixedFullName.hashCode() + activityEvent.getType().hashCode()
> + + activityEvent.getDate().hashCode();
> + }
> + }
> +
> + /**
> + * Add another event associated to this event.
> + *
> + * @param event The event to add.
> + */
> + public void addEvent(WatchListEvent event)
> + {
> + if (ActivityEventType.DELETE.equals(event.getType())) {
> + // If the document has been deleted, reset this event
> + activityEvents.clear();
> + type = event.getType();
> + versions.clear();
> + versions = null;
> + authors.clear();
> + authors = null;
> + previousVersion = null;
> + htmlDiff = null;
> + } else if (ActivityEventType.UPDATE.equals(event.getType()) && ActivityEventType.DELETE.equals(getType())) {
> + // If an update event had been fired before a delete, discard it
> + return;
> + }
> +
> + activityEvents.add(event.getActivityEvent());
> + }
The following methods are not threadsafe at all. Should they be?
Why don't we build these lists as we add events? The current usage
patterns probably don't add new events after retrieving the list of
dates/authors, but this code has a dependency on the order in which
methods are called, which is not good.
> + /**
> + * @return Get all the dates of a composite event, if this event is not a composite this list will contain single
> + * entry.
> + */
> + public List<Date> getDates()
> + {
> + if (dates == null) {
> + dates = new ArrayList<Date>();
I don't think this is needed, since isComposite simply checks the size
of the list. It brings a marginal performance gain with the cost of
increased code complexity.
> + if (!isComposite()) {
> + dates.add(getDate());
> + } else {
> + for (ActivityEvent event : activityEvents) {
> + dates.add(event.getDate());
> + }
> + }
> + }
> +
> + return dates;
> + }
> +
> + public List<String> getAuthors()
> +
> + public List<String> getVersions()
> +
> +
> + /**
> + * @param classAttr The class of the div to create
> + * @return a HTML div element
> + */
> + private Div createDiffDiv(String classAttr)
> + {
Oh no, please don't use jakarta-ecs. It's a dead project.
> + Div div = new Div();
> + div.setClass(classAttr);
> + div.setStyle(HTML_STYLE_PLACEHOLDER_PREFIX + classAttr);
> +
> + return div;
> + }
> +
> +
> + /**
> + * Overriding of the default equals method.
> + *
> + * @param obj the ActivityEvent to be compared with
> + * @return True if the two events have been generated by the same document and are equals or conflicting
> + */
> + @Override
> + public boolean equals(Object obj)
> + {
> + if (this == obj) {
> + return true;
> + }
> +
> + if (!(obj instanceof WatchListEvent)) {
> + return false;
> + }
This is not correct, any implementation of equals must be commutative:
this.equals(event) must return the same as event.equals(this).
> + // At first this method was returning true when the documents were the same and the events were the same type.
> + // Since we don't want to keep update events for documents that have been deleted this method has been modified
> + // to a point were it performs something different from a equals(), it returns true when obj is a delete event
> + // and 'this' is an update event. See WatchListEventManager#WatchListEventManager(Date, XWikiContext).
> + // TODO: refactoring.
> + WatchListEvent event = ((WatchListEvent) obj);
> + return prefixedFullName.equals(event.getPrefixedFullName()) && WatchListEventType.UPDATE.equals(getType())
> + && (WatchListEventType.UPDATE.equals(event.getType()) || WatchListEventType.DELETE.equals(event.getType()));
> + }
> +}
> Added: platform/xwiki-plugins/trunk/watchlist/src/main/java/com/xpn/xwiki/plugin/watchlist/WatchListJob.java
> ===================================================================
> --- platform/xwiki-plugins/trunk/watchlist/src/main/java/com/xpn/xwiki/plugin/watchlist/WatchListJob.java (rev 0)
> +++ platform/xwiki-plugins/trunk/watchlist/src/main/java/com/xpn/xwiki/plugin/watchlist/WatchListJob.java 2009-08-25 13:03:08 UTC (rev 22900)
> @@ -0,0 +1,257 @@
> +
> +/**
Why "abstract"? The documentation does not provide any information, the
fact that it implements a Job can be seen from the list of implements.
> + * WatchList abstract implementation of Quartz's Job.
> + *
> + * @version $Id$
> + */
> +public class WatchListJob extends AbstractJob implements Job
> +{
These two methods are pretty generic, they should be moved somewhere
else, in the core.
> + /**
> + * Initialize container context.
> + *
> + * @param context The XWiki context.
> + * @throws ServletException If the container initialization fails.
> + */
> + protected void initializeComponents(XWikiContext context) throws ServletException
> +
> + /**
> + * Clean the container context.
> + */
> + protected void cleanupComponents()
> Modified: platform/xwiki-plugins/trunk/watchlist/src/main/java/com/xpn/xwiki/plugin/watchlist/WatchListPluginApi.java
> ===================================================================
> --- platform/xwiki-plugins/trunk/watchlist/src/main/java/com/xpn/xwiki/plugin/watchlist/WatchListPluginApi.java 2009-08-25 12:55:58 UTC (rev 22899)
> +++ platform/xwiki-plugins/trunk/watchlist/src/main/java/com/xpn/xwiki/plugin/watchlist/WatchListPluginApi.java 2009-08-25 13:03:08 UTC (rev 22900)
> @@ -22,6 +22,7 @@
This change:
> -public class WatchListPluginApi extends PluginApi
> +public class WatchListPluginApi extends PluginApi<WatchListPlugin>
> {
means that we don't need getWatchlistPlugin anymore, but getProtectedPlugin.
> - return getWatchListPlugin().getWatchedSpaces(getXWikiContext().getUser(),
> - getXWikiContext()).contains(context.getDatabase() + ":" + context.getDoc().getSpace());
> + return getWatchListPlugin().getStore().getWatchedElements(context.getUser(), ElementType.SPACE, context)
> + .contains(context.getDatabase() + WatchListStore.WIKI_SPACE_SEP + context.getDoc().getSpace());
> }
> Added: platform/xwiki-plugins/trunk/watchlist/src/main/java/com/xpn/xwiki/plugin/watchlist/WatchListStore.java
> ===================================================================
> --- platform/xwiki-plugins/trunk/watchlist/src/main/java/com/xpn/xwiki/plugin/watchlist/WatchListStore.java (rev 0)
> +++ platform/xwiki-plugins/trunk/watchlist/src/main/java/com/xpn/xwiki/plugin/watchlist/WatchListStore.java 2009-08-25 13:03:08 UTC (rev 22900)
> @@ -0,0 +1,621 @@
@SuppressWarnings should only be used when there's no other way. It's
better to fix the warning.
> +@SuppressWarnings("serial")
> +public class WatchListStore implements EventListener
> +{
These two are very generic, I think they should be defined in the XWiki
Syntax.
> + /**
> + * Character used to separated wiki and space in XWiki model.
> + */
> + public static final String WIKI_SPACE_SEP = ":";
> +
> + /**
> + * Character used to separated space and page in XWiki model.
> + */
> + public static final String SPACE_PAGE_SEP = ".";
Enums are supposed to elliminate (or at least reduce) elseif
programming. This could go in a method of the enum.
> + private String getWatchListClassPropertyForType(ElementType type)
> + {
> + if (ElementType.WIKI.equals(type)) {
> + return WATCHLIST_CLASS_WIKIS_PROP;
> + } else if (ElementType.SPACE.equals(type)) {
> + return WATCHLIST_CLASS_SPACES_PROP;
> + } else if (ElementType.DOCUMENT.equals(type)) {
> + return WATCHLIST_CLASS_DOCUMENTS_PROP;
> + } else {
> + return StringUtils.EMPTY;
> + }
> + }
--
Sergiu Dumitriu
http://purl.org/net/sergiu/
Hi all,
The subject has been discussed already, see for example
http://markmail.org/message/h5e2qinrhsf2slww
The idea is to create a new top level project for modules (modules in
the sense of everything applications, macros, components, plugins, skin
extensions, etc.) that are not part of any products (or the platform)
and that are not necessarily contributed by the XWiki development team.
The difference with the sandbox is that sandbox is a place for modules
being incubated, and that are not in a finished state. Thus, I think one
of the rule for introducing new modules in the xlet repository would be
that a functional version of the module should be released and available
for download (for example on code.xwiki.org).
The name "xlet" is the name we've use historically to talk about this
repository, this is open for discussion. (personally I like the name -
we have to agree this is how we want to name a XWiki "pluggable module"
in the large sense).
Here is my +1 for the above
I would also like to propose that we create a new category of JIRA
projects : "XWiki Contributed Xlets" (or equivalent name) for such
projects that desire to track issues for their released module, and have
the tracker hosted by XWiki.org. I believe this will make easier to have
real release cycles for such modules (for example, we can link to the
JIRA project from the code.xwiki.org "module" page so that users can
report issues instead of using the comments, we can use JIRAs changelog
for release notes on the download page, etc.)
And my +1 for this second proposal
Please, let me know what you think
Jerome.
Hi,
In order to fix issue http://jira.xwiki.org/jira/browse/XWIKI-4428
I've had to dive very deep and fix Sun's URLClassLoader which has a
large number of problems. To do so I had to rewrite several classes
and I've taken sources from Emory Utilities (http://dcl.mathcs.emory.edu/php/loadPage.php?content=util/features.html#cla…
) and modified them slightly (since they were missing the ability to
support custom URL Stream handlers).
So I have a new URIClassLoader that extends URLClassLoader + a set of
associated classes (stream handlers and url connection implementations).
I'd like to commit this in a new xwiki-classloader module, dedicated
to classloading code (same as we have xwiki-xml for ex).
Let me know if you need more details.
Here's my +1
Thanks
-Vincent
Hi Devs,
Currently the method signature looks like:
public String officeToXHTML(String pageName, Map<String, String>
cleaningParams) throws XWikiGWTException
The contract is that this method will import whatever the "latest"
attachment to the given document into xhtml. This is bit unsafe and we have
a better option of using com.xpn.xwiki.wysiwyg.client.util.Attachment
instead.
So the new method that would be introduced is:
public String officeToXHTML(Attachment attachment, Map<String, String>
cleaningParams) throws XWikiGWTException;
This is more clean, expressive and safe.
WDYT?
- Asiri
Hi Everyone, Hi Marius,
I was wondering when I embed a GWT application, the Mail sample, provided
by GWT SDK into Xwiki page like this:
<script type="text/javascript" language='javascript'
src='js/xwiki/mail/mail.nocache.js'></script>
why this GWT application would not appear in the Xwiki page, nothing
happened? I have read the
http://code.google.com/webtoolkit/doc/1.6/DevGuideOrganizingProjects.html
<http://code.google.com/webtoolkit/doc/1.6/DevGuideOrganizingProjects.html>In
"The Bootstrap Sequence" section, it has an example
7. myApp/myApp.nocache.js completes, and the compiled script (
<hashname>.cache.html) begins fetching in a hidden IFRAME (this is
non-blocking).
8. <hashname>.cache.html completes. onModuleLoad() is not called yet, as
we're still waiting on externalScriptOne.js to complete before the document
is considered 'ready'.
9. externalScriptOne.js completes. The document is ready, so
onModuleLoad() fires.
Why in the Xwiki page, the onModuleLoad() seems does not work?
PS: I am willing to contribute to Xwiki, what can I do for you guys? What I
can think of is that I have poster presentation at the Graduate Research
Forum on November 6, 2009, I will present my work on posters and I print
and hand out some flyers about Xwiki to people to give Xwiki a advertise.
What do you guys think of. If anything I could help please let me know.
Thank you all.
--
http://freeleons.spaces.live.com/
Life might lead me where I least expected.However,I have faith I'm exactly
where I am meant to be.
Hi Marius,
Last time you said, "Of course you can keep it simple and load your tree
when the page loads.In the first versions of the GWT-based WYSIWYG editor
the Wysiwyg.onModuleLoad method was creating an editor instance for
each 'window.WysiwygXXX' JavaScript object found. " Could you please point
me to which source file I can refer to as an example to load the tree when
the page loads? I need to write a JavaScript like "XWikiWysiwyg.js" to do
that, right? Your bootstrapper is pretty cool and I think it is hard for me.
Maybe the in future it needs load on demand then I will do that.
PS: if you guys write English on Facebook, I would know what does it mean.
:-)
Thank you!
Leon
LinkedIn
------------
I'd like to add you to my professional network on LinkedIn.
- freeleons
Accept freeleons Wang's invite:
https://www.linkedin.com/e/isd/781708562/_daoWutU/
------
(c) 2009, LinkedIn Corporation
For my application I would like to be able to easily set up a set of 'home' spaces for each student in a class as well as a common shared space. For the 'home' spaces I would like the default permissions to be world readable but only editable by the space owner. The owner can open it up if they desire later. The shared class space would be editable by all the students. Ideally I would like to import a csv that had the user names and email addresses. I see the process as follows:
Read/parse the csv file
Create each user, assigning either a random password or one read from the csv
Create space for each user and set permissions on the space
Put all the students into a group and create a shared space with group edit permissions
Has anyone done something similar? What is the best approach for something like this? Groovy vs java jar? Any pointers to the apis to easily create users/assign permissions etc would be helpful as well.
Thanks,
Glenn