kune-commits
Threads by month
- ----- 2026 -----
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
December 2011
- 1 participants
- 20 discussions
#104: Welcome like Tumblr, in the first visit
---------------------------+-------------------
Reporter: sam <samer@…> | Owner: vjrj
Type: enhancement | Status: new
Priority: critical | Milestone:
Component: Group space | Version:
Keywords: | Blocked By:
Blocking: |
---------------------------+-------------------
No one reads the first welcome document that explains Kune behaviour.
Thus, when a new user arrives, faces several issues:
1) cannot edit anything
2) cannot do much neither create new stuff. Even if he/she discovers how
to sign up, the user doesn't know yet how to edit anything.
3) doesn't realize that the top-left icons exist, so the experience is
very limited.
[Bastien tried it for 30 seconds and George for dont know how long, both
with similar results.]
Proposal: highlight the initial experience, such as Tumblr (or Flattr)
does. Guide users to sign-up, guide users to the personal space... give
for granted no one reads the welcoming doc and introduce Kune's first
visit with a practical basic interactive tutorial. Idea: start Kune in a
task list with the tasks that are left to do: "sign up", "visit personal
space", "create a poll gadget", etc.
I consider it maximum priority, as it can kick out many initial testers,
that don't manage in 30 seconds to understand its behaviour.
--
Ticket URL: <http://kune.ourproject.org/issues/ticket/104>
kune issues <http://kune.ourproject.org/issues/>
1
3
Author: vjrj_
Date: 2011-12-29 23:15:28 +0100 (Thu, 29 Dec 2011)
New Revision: 1651
Modified:
kune-sandbox/.classpath
Log:
Modified: kune-sandbox/.classpath
===================================================================
--- kune-sandbox/.classpath 2011-12-28 03:24:40 UTC (rev 1650)
+++ kune-sandbox/.classpath 2011-12-29 22:15:28 UTC (rev 1651)
@@ -11,6 +11,5 @@
<classpathentry kind="lib" path="lib/gin-r137.jar"/>
<classpathentry kind="lib" path="lib/guice-3.0-rc2.jar"/>
<classpathentry kind="lib" path="lib/gwtp-all-0.5.jar"/>
- <classpathentry kind="lib" path="lib/gwt-plupload-1.1.jar"/>
<classpathentry kind="output" path="war/WEB-INF/classes"/>
</classpath>
1
0
Author: vjrj_
Date: 2011-12-28 04:24:40 +0100 (Wed, 28 Dec 2011)
New Revision: 1650
Modified:
trunk/src/main/resources/mail-notif-template.html
Log:
NEW - # 164: NotificationManager in server side
http://kune.ourproject.org/issues/ticket/164
Modified: trunk/src/main/resources/mail-notif-template.html
===================================================================
--- trunk/src/main/resources/mail-notif-template.html 2011-12-27 18:32:08 UTC (rev 1649)
+++ trunk/src/main/resources/mail-notif-template.html 2011-12-28 03:24:40 UTC (rev 1650)
@@ -5,117 +5,117 @@
<td align="center" valign="top">
<div style="text-align: justify;"> </div>
<table border="0" cellpadding="0" cellspacing="0"
- width="751">
- <tbody>
- <tr>
- <td style="padding: 10px 0pt 10px 10px; font-family:
- Arial,Helvetica,sans-serif; font-size: 11px; color:
- rgb(136, 136, 136);" align="left">
- <div style="text-align: center;"> Images not
- displaying
- properly? Add <a
- href="mailto:[email protected]"
- style="color: rgb(64, 137, 187);">noreply-FIXME(a)example.org</a>
- to your
- address book. </div>
- </td>
- </tr>
- <tr>
- <td style="border: 1px solid rgb(156, 156, 156);
- padding: 5px; -moz-border-radius-topleft: 5px !
- important; -moz-border-radius-topright: 5px !
- important; -moz-border-radius-bottomright: 5px !
- important; -moz-border-radius-bottomleft: 5px !
- important;" align="left" bgcolor="#ffffff">
- <div style="border: 7px solid rgb(198, 168, 141);
- -moz-border-radius-topleft: 5px ! important;
- -moz-border-radius-topright: 5px ! important;
- -moz-border-radius-bottomright: 5px ! important;
- -moz-border-radius-bottomleft: 5px ! important;">
- <table style="border-radius: 3px 3px 3px 3px !
- important;" border="0" cellpadding="0"
- cellspacing="0" width="725">
- <tbody>
- <tr>
- <td style="padding: 0pt 0pt 20px;">
- <div style="text-align: justify;"> </div>
- <table border="0" cellpadding="0"
- cellspacing="0" height="50" width="725">
- <tbody>
- <tr>
- <td style="font-family:
- Arial,Helvetica,sans-serif;
- font-size: 14px; color: rgb(51,
- 51, 51); padding: 0px 0px 20px
- 20px;" align="left" valign="top"
- width="297"><br>
- <a
- href="http://FIXME-yoursite-url/"
- target="_blank"><img
- style="border-top: 0px solid;
- border-bottom: 0px solid;
- -moz-border-top-colors: none;
- -moz-border-right-colors:
- none;
- -moz-border-bottom-colors:
- none; -moz-border-left-colors:
- none; -moz-border-image:
- none;" moz-do-not-send="true"
- src="ws/logo-big-home.png#FIXME-logo" alt="your
- site name FIXME" align="top"
- border="0" height="41"
- width="287"></a></td>
- <td
- style="border-bottom-left-radius: 10px; font-family:
- Arial,Helvetica,sans-serif; background-color: rgb(244, 214, 188);
- font-size: 12px; color: rgb(102,
- 102, 102); line-height: 17px;
- padding: 20px;" align="left"
- valign="top"
- width="143">
- <p style="margin: 0pt 0pt 8px;
- font-size: 15px; color: rgb(85,
- 85, 85);"> <b>Some Info FIXME:</b></p>
- <br>
- </td>
- </tr>
- </tbody>
- </table>
- </td>
- </tr>
- <tr>
- <td style="padding: 20px; font-family: Arial,Helvetica,sans-serif;" valign="top"><br>
- <br>
- %s<br>
- <br>
- <br>
- </td>
- </tr>
- <tr>
- <td style="border-top-width: 1px;
- border-top-style: solid; border-top-color:
- rgb(214, 214, 214); background-color:
- rgb(255, 245, 237); font-family:
- Arial,Helvetica,sans-serif; font-size:
- 11px; color: rgb(102, 102, 102);
- line-height: 17px; padding: 5px 10px;"
- bgcolor="#ffb380"> To ensure this email
- always reaches your inbox, please add <a
- href="mailto:[email protected]">noreply(a)example.orgFIXME</a>
- to your address book. If you prefer not to
- receive this emails in the future, please
- update your
- preferences in <a href="http://FIXME">this
- link</a>.</td>
- </tr>
- </tbody>
- </table>
- </div>
- </td>
- </tr>
- </tbody>
- </table>
- </td>
+ width="751">
+ <tbody>
+ <tr>
+ <td style="padding: 10px 0pt 10px 10px; font-family:
+ Arial,Helvetica,sans-serif; font-size: 11px; color:
+ rgb(136, 136, 136);" align="left">
+ <div style="text-align: center;"> Images not
+ displaying
+ properly? Add <a
+ href="mailto:[email protected]"
+ style="color: rgb(64, 137, 187);">noreply-FIXME(a)example.org</a>
+ to your
+ address book. </div>
+ </td>
</tr>
+ <tr>
+ <td style="border: 1px solid rgb(156, 156, 156);
+ padding: 5px; -moz-border-radius-topleft: 5px !
+ important; -moz-border-radius-topright: 5px !
+ important; -moz-border-radius-bottomright: 5px !
+ important; -moz-border-radius-bottomleft: 5px !
+ important;" align="left" bgcolor="#ffffff">
+ <div style="border: 7px solid rgb(198, 168, 141);
+ -moz-border-radius-topleft: 5px ! important;
+ -moz-border-radius-topright: 5px ! important;
+ -moz-border-radius-bottomright: 5px ! important;
+ -moz-border-radius-bottomleft: 5px ! important;">
+ <table style="border-radius: 3px 3px 3px 3px !
+ important;" border="0" cellpadding="0"
+ cellspacing="0" width="725">
+ <tbody>
+ <tr>
+ <td style="padding: 0pt 0pt 20px;">
+ <div style="text-align: justify;"> </div>
+ <table border="0" cellpadding="0"
+ cellspacing="0" height="50" width="725">
+ <tbody>
+ <tr>
+ <td style="font-family:
+ Arial,Helvetica,sans-serif;
+ font-size: 14px; color: rgb(51,
+ 51, 51); padding: 0px 0px 20px
+ 20px;" align="left" valign="top"
+ width="271"><br>
+ <a
+ href="http://FIXME-yoursite-url/"
+ target="_blank"><img
+ style="border-top: 0px solid;
+ border-bottom: 0px solid;
+ -moz-border-top-colors: none;
+ -moz-border-right-colors:
+ none;
+ -moz-border-bottom-colors:
+ none; -moz-border-left-colors:
+ none; -moz-border-image:
+ none;" moz-do-not-send="true"
+ src="http://kune.beta.iepala.es/ws/logo-big-home.png#FIXME-logo" alt="your
+ site name FIXME" align="top"
+ border="0" height="50"
+ width="271"></a></td>
+ <td
+ style="border-bottom-left-radius: 10px; font-family:
+ Arial,Helvetica,sans-serif; background-color: rgb(244, 214, 188);
+ font-size: 12px; color: rgb(102,
+ 102, 102); line-height: 17px;
+ padding: 20px;" align="left"
+ valign="top"
+ width="143">
+ <p style="margin: 0pt 0pt 8px;
+ font-size: 15px; color: rgb(85,
+ 85, 85);"> <b>Some Info FIXME:</b></p>
+ <br>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td style="padding: 20px; font-family: Arial,Helvetica,sans-serif;" valign="top"><br>
+ <br>
+ %s<br>
+ <br>
+ <br>
+ </td>
+ </tr>
+ <tr>
+ <td style="border-top-width: 1px;
+ border-top-style: solid; border-top-color:
+ rgb(214, 214, 214); background-color:
+ rgb(255, 245, 237); font-family:
+ Arial,Helvetica,sans-serif; font-size:
+ 11px; color: rgb(102, 102, 102);
+ line-height: 17px; padding: 5px 10px;"
+ bgcolor="#ffb380"> To ensure this email
+ always reaches your inbox, please add <a
+ href="mailto:[email protected]">noreply(a)example.orgFIXME</a>
+ to your address book. If you prefer not to
+ receive this emails in the future, please
+ update your
+ preferences in <a href="http://FIXME">this
+ link</a>.</td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ </tr>
</tbody>
</table>
\ No newline at end of file
1
0
r1649 - in trunk/src/main: java/cc/kune/core/server/mail java/cc/kune/core/server/manager/impl java/cc/kune/core/server/notifier java/cc/kune/core/server/properties java/cc/kune/core/shared/dto java/cc/kune/gspace/client/options/general java/cc/kune/wave/server resources
by Vicente J. Ruiz Jurado 27 Dec '11
by Vicente J. Ruiz Jurado 27 Dec '11
27 Dec '11
Author: vjrj_
Date: 2011-12-27 19:32:08 +0100 (Tue, 27 Dec 2011)
New Revision: 1649
Added:
trunk/src/main/resources/mail-notif-template.html
Modified:
trunk/src/main/java/cc/kune/core/server/mail/MailService.java
trunk/src/main/java/cc/kune/core/server/mail/MailServiceDefault.java
trunk/src/main/java/cc/kune/core/server/manager/impl/UserManagerDefault.java
trunk/src/main/java/cc/kune/core/server/notifier/NotifyServiceDefault.java
trunk/src/main/java/cc/kune/core/server/properties/KuneProperties.java
trunk/src/main/java/cc/kune/core/shared/dto/UserSimpleDTO.java
trunk/src/main/java/cc/kune/gspace/client/options/general/UserOptGeneralPanel.java
trunk/src/main/java/cc/kune/gspace/client/options/general/UserOptGeneralPresenter.java
trunk/src/main/java/cc/kune/gspace/client/options/general/UserOptGeneralView.java
trunk/src/main/java/cc/kune/wave/server/WaveEmailNotifier.java
trunk/src/main/resources/kune.properties
Log:
NEW - # 164: NotificationManager in server side
http://kune.ourproject.org/issues/ticket/164
Modified: trunk/src/main/java/cc/kune/core/server/mail/MailService.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/mail/MailService.java 2011-12-27 01:32:05 UTC (rev 1648)
+++ trunk/src/main/java/cc/kune/core/server/mail/MailService.java 2011-12-27 18:32:08 UTC (rev 1649)
@@ -24,6 +24,34 @@
public interface MailService {
/**
+ * Sends email
+ *
+ * @param subject
+ * the email subject
+ * @param body
+ * the body of the email in text or html format
+ * @param from
+ * the sender
+ * @param tos
+ * the recipients
+ */
+ void send(FormatedString subject, FormatedString body, boolean isHtml, String... tos);
+
+ /**
+ * Sends email
+ *
+ * @param subject
+ * the email subject
+ * @param body
+ * the body of the email in text or html format
+ * @param from
+ * the sender
+ * @param tos
+ * the recipients
+ */
+ void send(String from, FormatedString subject, FormatedString body, boolean isHtml, String... tos);
+
+ /**
* Sends html email with default site "from"
*
* @param subject
Modified: trunk/src/main/java/cc/kune/core/server/mail/MailServiceDefault.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/mail/MailServiceDefault.java 2011-12-27 01:32:05 UTC (rev 1648)
+++ trunk/src/main/java/cc/kune/core/server/mail/MailServiceDefault.java 2011-12-27 18:32:08 UTC (rev 1649)
@@ -97,7 +97,14 @@
props.put("mail.smtp.host", smtpServer);
}
- private void send(final String from, final FormatedString subject, final FormatedString body,
+ @Override
+ public void send(final FormatedString subject, final FormatedString body, final boolean isHtml,
+ final String... tos) {
+ send(smtpDefaultFrom, subject, body, isHtml, tos);
+ }
+
+ @Override
+ public void send(final String from, final FormatedString subject, final FormatedString body,
final boolean isHtml, final String... tos) {
if (smtpSkip) {
return;
Modified: trunk/src/main/java/cc/kune/core/server/manager/impl/UserManagerDefault.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/manager/impl/UserManagerDefault.java 2011-12-27 01:32:05 UTC (rev 1648)
+++ trunk/src/main/java/cc/kune/core/server/manager/impl/UserManagerDefault.java 2011-12-27 18:32:08 UTC (rev 1649)
@@ -371,6 +371,7 @@
final String longName = userDTO.getName();
final String email = userDTO.getEmail();
final Group userGroup = user.getUserGroup();
+ user.setEmailNotifFreq(userDTO.getEmailNotifFreq());
// We don't allow to change shortName because we cannot change shotNames in
// wave accounts
// if (!shortName.equals(user.getShortName())) {
Modified: trunk/src/main/java/cc/kune/core/server/notifier/NotifyServiceDefault.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/notifier/NotifyServiceDefault.java 2011-12-27 01:32:05 UTC (rev 1648)
+++ trunk/src/main/java/cc/kune/core/server/notifier/NotifyServiceDefault.java 2011-12-27 18:32:08 UTC (rev 1649)
@@ -1,24 +1,33 @@
package cc.kune.core.server.notifier;
+import java.io.File;
+import java.io.IOException;
+
import javax.persistence.NoResultException;
+import org.apache.commons.io.FileUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import cc.kune.common.client.utils.TextUtils;
import cc.kune.core.server.mail.MailService;
import cc.kune.core.server.mail.MailServiceDefault.FormatedString;
import cc.kune.core.server.manager.I18nTranslationManager;
import cc.kune.core.server.manager.UserManager;
+import cc.kune.core.server.properties.KuneProperties;
import cc.kune.core.server.xmpp.XmppManager;
+import cc.kune.core.shared.domain.dto.EmailNotificationFrequency;
import cc.kune.domain.User;
import cc.kune.wave.server.KuneWaveService;
+import com.google.common.base.Preconditions;
import com.google.inject.Inject;
import com.google.inject.Singleton;
@Singleton
public class NotifyServiceDefault implements NotifyService {
public static final Log LOG = LogFactory.getLog(NotifyServiceDefault.class);
+ private final String emailTemplate;
private final I18nTranslationManager i18n;
private final MailService mailService;
private final UserManager userManager;
@@ -27,12 +36,17 @@
@Inject
public NotifyServiceDefault(final MailService mailService, final KuneWaveService waveService,
- final XmppManager xmppManager, final UserManager userManager, final I18nTranslationManager i18n) {
+ final XmppManager xmppManager, final UserManager userManager, final I18nTranslationManager i18n,
+ final KuneProperties kuneProperties) throws IOException {
this.mailService = mailService;
this.waveService = waveService;
this.xmppManager = xmppManager;
this.userManager = userManager;
this.i18n = i18n;
+ emailTemplate = FileUtils.readFileToString(new File(
+ kuneProperties.get(KuneProperties.SITE_EMAIL_TEMPLATE)));
+ Preconditions.checkNotNull(emailTemplate);
+ Preconditions.checkArgument(TextUtils.notEmpty(emailTemplate));
}
@Override
@@ -50,12 +64,14 @@
final String subjectTranslation = i18n.getTranslation(user.getLanguage().getCode(),
subject.getTemplate(), "");
if (subjectTranslation != null) {
- subject.setTemplate(subjectTranslation);
+ // Right now commented because we are only testing
+ // subject.setTemplate(subjectTranslation);
}
final String bodyTranslation = i18n.getTranslation(user.getLanguage().getCode(),
body.getTemplate(), "");
if (bodyTranslation != null) {
- body.setTemplate(bodyTranslation);
+ // Right now commented because we are only testing
+ // body.setTemplate(bodyTranslation);
}
switch (notifyType) {
case chat:
@@ -63,11 +79,11 @@
String.format("<b>%s</b>%s", subject.getString(), body.getString()));
break;
case email:
- final String email = user.getEmail();
- if (isHtml) {
- mailService.sendHtml(subject, body, email);
+ if (user.getEmailNotifFreq().equals(EmailNotificationFrequency.immediately)) {
+ mailService.send(subject, FormatedString.build(emailTemplate.replace("%s", body.getString())),
+ isHtml, user.getEmail());
} else {
- mailService.sendPlain(subject, body, email);
+ // TODO: handle other types of notifications frequencies
}
break;
case wave:
Modified: trunk/src/main/java/cc/kune/core/server/properties/KuneProperties.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/properties/KuneProperties.java 2011-12-27 01:32:05 UTC (rev 1648)
+++ trunk/src/main/java/cc/kune/core/server/properties/KuneProperties.java 2011-12-27 18:32:08 UTC (rev 1649)
@@ -49,6 +49,7 @@
String SITE_DB_USER = "kune.db.user";
String SITE_DEF_LICENSE = "kune.default.license";
String SITE_DOMAIN = "kune.site.domain";
+ String SITE_EMAIL_TEMPLATE = "kune.site.email.template";
String SITE_GROUP_AVAILABLE_TOOLS = "kune.tools.groupSiteAvailableTools";
String SITE_GROUP_REGIST_ENABLED_TOOLS = "kune.tools.groupRegisEnabledTools";
String SITE_LOGO_URL = "kune.sitelogourl";
Modified: trunk/src/main/java/cc/kune/core/shared/dto/UserSimpleDTO.java
===================================================================
--- trunk/src/main/java/cc/kune/core/shared/dto/UserSimpleDTO.java 2011-12-27 01:32:05 UTC (rev 1648)
+++ trunk/src/main/java/cc/kune/core/shared/dto/UserSimpleDTO.java 2011-12-27 18:32:08 UTC (rev 1649)
@@ -19,6 +19,7 @@
*/
package cc.kune.core.shared.dto;
+import cc.kune.core.shared.domain.dto.EmailNotificationFrequency;
import cc.kune.core.shared.domain.utils.StateToken;
import com.google.gwt.user.client.rpc.IsSerializable;
@@ -32,6 +33,7 @@
private String shortName;
private StateToken stateToken;
private TimeZoneDTO timezone;
+ private EmailNotificationFrequency emailNotifFreq;
public UserSimpleDTO() {
this(null, null, null, null, null);
@@ -157,4 +159,12 @@
return "UserSimpleDTO(" + shortName + ")";
}
+ public EmailNotificationFrequency getEmailNotifFreq() {
+ return emailNotifFreq;
+ }
+
+ public void setEmailNotifFreq(EmailNotificationFrequency emailNotifFreq) {
+ this.emailNotifFreq = emailNotifFreq;
+ }
+
}
Modified: trunk/src/main/java/cc/kune/gspace/client/options/general/UserOptGeneralPanel.java
===================================================================
--- trunk/src/main/java/cc/kune/gspace/client/options/general/UserOptGeneralPanel.java 2011-12-27 01:32:05 UTC (rev 1648)
+++ trunk/src/main/java/cc/kune/gspace/client/options/general/UserOptGeneralPanel.java 2011-12-27 18:32:08 UTC (rev 1649)
@@ -26,6 +26,7 @@
import cc.kune.core.shared.dto.I18nLanguageSimpleDTO;
import cc.kune.gspace.client.i18n.LanguageSelectorPanel;
+import com.extjs.gxt.ui.client.widget.form.CheckBox;
import com.extjs.gxt.ui.client.widget.form.FormPanel.LabelAlign;
import com.extjs.gxt.ui.client.widget.form.TextField;
import com.google.inject.Inject;
@@ -33,6 +34,7 @@
public class UserOptGeneralPanel extends EntityOptGeneralPanel implements UserOptGeneralView {
private static final String LONG_NAME_FIELD = "k-uogp-lname";
+ private final CheckBox emailNotifField;
private final LanguageSelectorPanel langSelector;
private final TextField<String> longName;
@@ -48,6 +50,9 @@
langSelector.setLabelAlign(LabelAlign.LEFT);
langSelector.setLangSeparator(":");
add(langSelector);
+ emailNotifField = new CheckBox();
+ emailNotifField.setFieldLabel(i18n.t("Email notifications"));
+ add(emailNotifField);
}
@Override
@@ -60,6 +65,14 @@
return longName.getValue();
}
+ public boolean isEmailNofifField() {
+ return emailNotifField.getValue();
+ }
+
+ public void setEmailNofifField(final boolean value) {
+ emailNotifField.setValue(value);
+ }
+
@Override
public void setLanguage(final I18nLanguageSimpleDTO language) {
langSelector.setLanguage(language);
Modified: trunk/src/main/java/cc/kune/gspace/client/options/general/UserOptGeneralPresenter.java
===================================================================
--- trunk/src/main/java/cc/kune/gspace/client/options/general/UserOptGeneralPresenter.java 2011-12-27 01:32:05 UTC (rev 1648)
+++ trunk/src/main/java/cc/kune/gspace/client/options/general/UserOptGeneralPresenter.java 2011-12-27 18:32:08 UTC (rev 1649)
@@ -28,6 +28,7 @@
import cc.kune.core.client.state.StateManager;
import cc.kune.core.client.state.UserSignInEvent;
import cc.kune.core.client.state.UserSignInEvent.UserSignInHandler;
+import cc.kune.core.shared.domain.dto.EmailNotificationFrequency;
import cc.kune.core.shared.dto.I18nLanguageSimpleDTO;
import cc.kune.core.shared.dto.StateAbstractDTO;
import cc.kune.core.shared.dto.UserDTO;
@@ -74,6 +75,8 @@
final UserSimpleDTO currentUser = session.getCurrentUser();
userView.setLongName(currentUser.getName());
userView.setLanguage(I18nLanguageSimpleDTO.create(currentUser.getLanguage()));
+ userView.setEmailNofifField(currentUser.getEmailNotifFreq().equals(
+ EmailNotificationFrequency.immediately));
}
@Override
@@ -86,6 +89,8 @@
final String longName = userView.getLongName();
user.setName(longName);
final I18nLanguageSimpleDTO lang = userView.getLanguage();
+ user.setEmailNotifFreq(userView.isEmailNofifField() ? EmailNotificationFrequency.immediately
+ : EmailNotificationFrequency.no);
userService.get().updateUser(session.getUserHash(), user, userView.getLanguage(),
new AsyncCallbackSimple<StateAbstractDTO>() {
@Override
Modified: trunk/src/main/java/cc/kune/gspace/client/options/general/UserOptGeneralView.java
===================================================================
--- trunk/src/main/java/cc/kune/gspace/client/options/general/UserOptGeneralView.java 2011-12-27 01:32:05 UTC (rev 1648)
+++ trunk/src/main/java/cc/kune/gspace/client/options/general/UserOptGeneralView.java 2011-12-27 18:32:08 UTC (rev 1649)
@@ -27,6 +27,10 @@
String getLongName();
+ boolean isEmailNofifField();
+
+ void setEmailNofifField(boolean value);
+
void setLanguage(I18nLanguageSimpleDTO language);
void setLongName(String longName);
Modified: trunk/src/main/java/cc/kune/wave/server/WaveEmailNotifier.java
===================================================================
--- trunk/src/main/java/cc/kune/wave/server/WaveEmailNotifier.java 2011-12-27 01:32:05 UTC (rev 1648)
+++ trunk/src/main/java/cc/kune/wave/server/WaveEmailNotifier.java 2011-12-27 18:32:08 UTC (rev 1649)
@@ -57,7 +57,7 @@
final String address = user.getAddress();
if (partUtils.isLocal(address)) {
final String userName = partUtils.getAddressName(address);
- if (!usersOnline.isLogged(userName)) {
+ if (true || !usersOnline.isLogged(userName)) {
notifyService.send(NotifyType.email, FormatedString.build("You have a new message"),
body, true, userName);
notifyService.send(NotifyType.chat, FormatedString.build("New message"), body, true,
Modified: trunk/src/main/resources/kune.properties
===================================================================
--- trunk/src/main/resources/kune.properties 2011-12-27 01:32:05 UTC (rev 1648)
+++ trunk/src/main/resources/kune.properties 2011-12-27 18:32:08 UTC (rev 1649)
@@ -28,7 +28,12 @@
kune.site.smtp.defaultfrom = noreply@localhost
# If we should avoid the use of smtp (use only for avoid emails during development)
kune.site.smtp.skip = false
+# This file will we the html used to send emails to users.
+# We'll substitute the first %s by the body of the notification.
+# You can put this file in /etc/kune
+kune.site.email.template = src/main/resources/mail-notif-template.html
+
### Database
# Persistence name, choose between:
Added: trunk/src/main/resources/mail-notif-template.html
===================================================================
--- trunk/src/main/resources/mail-notif-template.html (rev 0)
+++ trunk/src/main/resources/mail-notif-template.html 2011-12-27 18:32:08 UTC (rev 1649)
@@ -0,0 +1,121 @@
+<table bgcolor="#f1f1f1" border="0" cellpadding="0" cellspacing="0"
+ height="100%" width="100%">
+ <tbody>
+ <tr>
+ <td align="center" valign="top">
+ <div style="text-align: justify;"> </div>
+ <table border="0" cellpadding="0" cellspacing="0"
+ width="751">
+ <tbody>
+ <tr>
+ <td style="padding: 10px 0pt 10px 10px; font-family:
+ Arial,Helvetica,sans-serif; font-size: 11px; color:
+ rgb(136, 136, 136);" align="left">
+ <div style="text-align: center;"> Images not
+ displaying
+ properly? Add <a
+ href="mailto:[email protected]"
+ style="color: rgb(64, 137, 187);">noreply-FIXME(a)example.org</a>
+ to your
+ address book. </div>
+ </td>
+ </tr>
+ <tr>
+ <td style="border: 1px solid rgb(156, 156, 156);
+ padding: 5px; -moz-border-radius-topleft: 5px !
+ important; -moz-border-radius-topright: 5px !
+ important; -moz-border-radius-bottomright: 5px !
+ important; -moz-border-radius-bottomleft: 5px !
+ important;" align="left" bgcolor="#ffffff">
+ <div style="border: 7px solid rgb(198, 168, 141);
+ -moz-border-radius-topleft: 5px ! important;
+ -moz-border-radius-topright: 5px ! important;
+ -moz-border-radius-bottomright: 5px ! important;
+ -moz-border-radius-bottomleft: 5px ! important;">
+ <table style="border-radius: 3px 3px 3px 3px !
+ important;" border="0" cellpadding="0"
+ cellspacing="0" width="725">
+ <tbody>
+ <tr>
+ <td style="padding: 0pt 0pt 20px;">
+ <div style="text-align: justify;"> </div>
+ <table border="0" cellpadding="0"
+ cellspacing="0" height="50" width="725">
+ <tbody>
+ <tr>
+ <td style="font-family:
+ Arial,Helvetica,sans-serif;
+ font-size: 14px; color: rgb(51,
+ 51, 51); padding: 0px 0px 20px
+ 20px;" align="left" valign="top"
+ width="297"><br>
+ <a
+ href="http://FIXME-yoursite-url/"
+ target="_blank"><img
+ style="border-top: 0px solid;
+ border-bottom: 0px solid;
+ -moz-border-top-colors: none;
+ -moz-border-right-colors:
+ none;
+ -moz-border-bottom-colors:
+ none; -moz-border-left-colors:
+ none; -moz-border-image:
+ none;" moz-do-not-send="true"
+ src="ws/logo-big-home.png#FIXME-logo" alt="your
+ site name FIXME" align="top"
+ border="0" height="41"
+ width="287"></a></td>
+ <td
+ style="border-bottom-left-radius: 10px; font-family:
+ Arial,Helvetica,sans-serif; background-color: rgb(244, 214, 188);
+ font-size: 12px; color: rgb(102,
+ 102, 102); line-height: 17px;
+ padding: 20px;" align="left"
+ valign="top"
+ width="143">
+ <p style="margin: 0pt 0pt 8px;
+ font-size: 15px; color: rgb(85,
+ 85, 85);"> <b>Some Info FIXME:</b></p>
+ <br>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td style="padding: 20px; font-family: Arial,Helvetica,sans-serif;" valign="top"><br>
+ <br>
+ %s<br>
+ <br>
+ <br>
+ </td>
+ </tr>
+ <tr>
+ <td style="border-top-width: 1px;
+ border-top-style: solid; border-top-color:
+ rgb(214, 214, 214); background-color:
+ rgb(255, 245, 237); font-family:
+ Arial,Helvetica,sans-serif; font-size:
+ 11px; color: rgb(102, 102, 102);
+ line-height: 17px; padding: 5px 10px;"
+ bgcolor="#ffb380"> To ensure this email
+ always reaches your inbox, please add <a
+ href="mailto:[email protected]">noreply(a)example.orgFIXME</a>
+ to your address book. If you prefer not to
+ receive this emails in the future, please
+ update your
+ preferences in <a href="http://FIXME">this
+ link</a>.</td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ </tr>
+ </tbody>
+ </table>
\ No newline at end of file
1
0
Author: vjrj_
Date: 2011-12-27 02:32:05 +0100 (Tue, 27 Dec 2011)
New Revision: 1648
Added:
trunk/src/main/java/cc/kune/core/server/notifier/
trunk/src/main/java/cc/kune/core/server/notifier/NotifyService.java
trunk/src/main/java/cc/kune/core/server/notifier/NotifyServiceDefault.java
trunk/src/main/java/cc/kune/core/server/notifier/NotifyType.java
trunk/src/main/java/cc/kune/core/server/notifier/UserOnlineSimpleManager.java
trunk/src/main/java/cc/kune/core/server/notifier/UsersOnline.java
trunk/src/main/java/cc/kune/core/server/scheduler/
trunk/src/main/java/cc/kune/core/server/scheduler/AbstractJob.java
trunk/src/main/java/cc/kune/core/server/scheduler/CronServerTasksManager.java
trunk/src/main/java/cc/kune/core/server/scheduler/DailyJob.java
trunk/src/main/java/cc/kune/core/server/scheduler/HourlyJob.java
trunk/src/main/java/cc/kune/core/server/testhelper/
trunk/src/main/java/cc/kune/core/server/testhelper/ctx/
trunk/src/main/java/cc/kune/core/shared/domain/dto/
trunk/src/main/java/cc/kune/core/shared/domain/dto/EmailNotificationFrequency.java
trunk/src/main/java/cc/kune/wave/server/WaveEmailNotifier.java
trunk/src/test/java/cc/kune/core/server/mail/
trunk/src/test/java/cc/kune/core/server/mail/MailServiceDefaultTest.java
Removed:
trunk/src/test/java/cc/kune/core/server/testhelper/
Modified:
trunk/.classpath
trunk/TODO
trunk/pom.xml
trunk/src/main/java/cc/kune/common/client/actions/ui/descrip/PushButtonDescriptor.java
trunk/src/main/java/cc/kune/core/server/KuneRackModule.java
trunk/src/main/java/cc/kune/core/server/PlatformServerModule.java
trunk/src/main/java/cc/kune/core/server/UserSessionManager.java
trunk/src/main/java/cc/kune/core/server/mail/MailService.java
trunk/src/main/java/cc/kune/core/server/mail/MailServiceDefault.java
trunk/src/main/java/cc/kune/core/server/properties/KuneBasicProperties.java
trunk/src/main/java/cc/kune/core/server/rack/RackServletFilter.java
trunk/src/main/java/cc/kune/core/server/rpc/UserRPC.java
trunk/src/main/java/cc/kune/core/shared/dto/UserDTO.java
trunk/src/main/java/cc/kune/domain/User.java
trunk/src/main/java/cc/kune/events/client/actions/EventAddMenuItem.java
trunk/src/main/java/cc/kune/events/client/viewer/CalendarViewerPresenter.java
trunk/src/main/java/cc/kune/wave/server/KuneAgent.java
trunk/src/main/java/cc/kune/wave/server/KuneWaveService.java
trunk/src/main/java/cc/kune/wave/server/KuneWaveServiceDefault.java
trunk/src/main/java/cc/kune/wave/server/ParticipantUtils.java
trunk/src/main/resources/kune.properties
Log:
NEW - # 164: NotificationManager in server side
http://kune.ourproject.org/issues/ticket/164
Modified: trunk/.classpath
===================================================================
--- trunk/.classpath 2011-12-21 23:32:22 UTC (rev 1647)
+++ trunk/.classpath 2011-12-27 01:32:05 UTC (rev 1648)
@@ -124,6 +124,7 @@
<classpathentry kind="var" path="M2_REPO/org/codehaus/plexus/plexus-container-default/1.0-alpha-8/plexus-container-default-1.0-alpha-8.jar" sourcepath="M2_REPO/org/codehaus/plexus/plexus-container-default/1.0-alpha-8/plexus-container-default-1.0-alpha-8-sources.jar"/>
<classpathentry kind="var" path="M2_REPO/org/codehaus/plexus/plexus-utils/1.0.4/plexus-utils-1.0.4.jar" sourcepath="M2_REPO/org/codehaus/plexus/plexus-utils/1.0.4/plexus-utils-1.0.4-sources.jar"/>
<classpathentry kind="var" path="M2_REPO/org/waveprotocol/proto-msg/0.3.8/proto-msg-0.3.8.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/quartz-scheduler/quartz/2.1.0/quartz-2.1.0.jar" sourcepath="M2_REPO/org/quartz-scheduler/quartz/2.1.0/quartz-2.1.0-sources.jar"/>
<classpathentry kind="var" path="M2_REPO/org/w3c/css/sac/1.3/sac-1.3.jar" sourcepath="M2_REPO/org/w3c/css/sac/1.3/sac-1.3-sources.jar"/>
<classpathentry kind="var" path="M2_REPO/org/seleniumhq/selenium/selenium-android-driver/2.12.0/selenium-android-driver-2.12.0.jar" sourcepath="M2_REPO/org/seleniumhq/selenium/selenium-android-driver/2.12.0/selenium-android-driver-2.12.0-sources.jar"/>
<classpathentry kind="var" path="M2_REPO/org/seleniumhq/selenium/selenium-api/2.12.0/selenium-api-2.12.0.jar" sourcepath="M2_REPO/org/seleniumhq/selenium/selenium-api/2.12.0/selenium-api-2.12.0-sources.jar"/>
Modified: trunk/TODO
===================================================================
--- trunk/TODO 2011-12-21 23:32:22 UTC (rev 1647)
+++ trunk/TODO 2011-12-27 01:32:05 UTC (rev 1648)
@@ -12,6 +12,13 @@
nick == assigned to
* SHORT-TERM (URGENT)
+** Emil notifications for new waves
+Email Notifications
+How often do you want to receive notifications?
+ almost immediately
+ at most hourly
+ at most daily
+ I don't need email notifications
** group.inexistentTool nasty error
** calendar support
*** gwt-cal + http://ical4j.sourceforge.net/introduction.html
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2011-12-21 23:32:22 UTC (rev 1647)
+++ trunk/pom.xml 2011-12-27 01:32:05 UTC (rev 1648)
@@ -694,6 +694,11 @@
<artifactId>mail</artifactId>
<version>1.4.4</version>
</dependency>
+ <dependency>
+ <groupId>org.quartz-scheduler</groupId>
+ <artifactId>quartz</artifactId>
+ <version>2.1.0</version>
+ </dependency>
<!-- calendar -->
<dependency>
<groupId>com.bradrydzewski</groupId>
Modified: trunk/src/main/java/cc/kune/common/client/actions/ui/descrip/PushButtonDescriptor.java
===================================================================
--- trunk/src/main/java/cc/kune/common/client/actions/ui/descrip/PushButtonDescriptor.java 2011-12-21 23:32:22 UTC (rev 1647)
+++ trunk/src/main/java/cc/kune/common/client/actions/ui/descrip/PushButtonDescriptor.java 2011-12-27 01:32:05 UTC (rev 1648)
@@ -20,34 +20,40 @@
package cc.kune.common.client.actions.ui.descrip;
import cc.kune.common.client.actions.AbstractAction;
+import cc.kune.common.client.actions.Action;
public class PushButtonDescriptor extends ButtonDescriptor {
- public static final String PUSHED = "pushed";
+ public static final String PUSHED = "pushed";
- public PushButtonDescriptor(final AbstractAction action) {
- super(action);
- setPushedImpl(false);
- }
+ public PushButtonDescriptor(final AbstractAction action) {
+ super(action);
+ setPushedImpl(false);
+ }
- public PushButtonDescriptor(final PushButtonDescriptor button) {
- this(button.getAction());
- }
+ public PushButtonDescriptor(final PushButtonDescriptor button) {
+ this(button.getAction());
+ }
- @Override
- public Class<?> getType() {
- return PushButtonDescriptor.class;
- }
+ public PushButtonDescriptor(final String text, final AbstractAction action) {
+ this(action);
+ putValue(Action.NAME, text);
+ }
- public boolean isPushed() {
- return (Boolean) getValue(PUSHED);
- }
+ @Override
+ public Class<?> getType() {
+ return PushButtonDescriptor.class;
+ }
- public void setPushed(final boolean pushed) {
- setPushedImpl(pushed);
- }
+ public boolean isPushed() {
+ return (Boolean) getValue(PUSHED);
+ }
- private void setPushedImpl(final boolean pushed) {
- putValue(PUSHED, pushed);
- }
+ public void setPushed(final boolean pushed) {
+ setPushedImpl(pushed);
+ }
+
+ private void setPushedImpl(final boolean pushed) {
+ putValue(PUSHED, pushed);
+ }
}
Modified: trunk/src/main/java/cc/kune/core/server/KuneRackModule.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/KuneRackModule.java 2011-12-21 23:32:22 UTC (rev 1647)
+++ trunk/src/main/java/cc/kune/core/server/KuneRackModule.java 2011-12-27 01:32:05 UTC (rev 1648)
@@ -115,7 +115,6 @@
install(FinderRegistry.init(jpaPersistModule));
bindInterceptor(Matchers.annotatedWith(LogThis.class), new NotInObject(),
new LoggerMethodInterceptor());
- // bindConstant().annotatedWith(PropertiesFileName.class).to(kuneConfig);
if (sessionScope != null) {
bindScope(SessionScoped.class, sessionScope);
}
Modified: trunk/src/main/java/cc/kune/core/server/PlatformServerModule.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/PlatformServerModule.java 2011-12-21 23:32:22 UTC (rev 1647)
+++ trunk/src/main/java/cc/kune/core/server/PlatformServerModule.java 2011-12-27 01:32:05 UTC (rev 1648)
@@ -86,6 +86,9 @@
import cc.kune.core.server.manager.impl.UserManagerDefault;
import cc.kune.core.server.mapper.DozerMapper;
import cc.kune.core.server.mapper.Mapper;
+import cc.kune.core.server.notifier.NotifyService;
+import cc.kune.core.server.notifier.NotifyServiceDefault;
+import cc.kune.core.server.notifier.UsersOnline;
import cc.kune.core.server.rpc.ContentRPC;
import cc.kune.core.server.rpc.GroupRPC;
import cc.kune.core.server.rpc.I18nRPC;
@@ -93,6 +96,7 @@
import cc.kune.core.server.rpc.SocialNetworkRPC;
import cc.kune.core.server.rpc.StatsRPC;
import cc.kune.core.server.rpc.UserRPC;
+import cc.kune.core.server.scheduler.CronServerTasksManager;
import cc.kune.core.server.state.StateService;
import cc.kune.core.server.state.StateServiceDefault;
import cc.kune.core.server.stats.StatsService;
@@ -109,7 +113,9 @@
import cc.kune.wave.server.KuneWaveService;
import cc.kune.wave.server.KuneWaveServiceDefault;
import cc.kune.wave.server.ParticipantUtils;
+import cc.kune.wave.server.WaveEmailNotifier;
+import com.google.inject.Singleton;
import com.google.inject.matcher.Matchers;
public class PlatformServerModule extends AbstractExtendedModule {
@@ -186,7 +192,11 @@
bind(EntityLogoUploadManager.class);
bind(EntityLogoDownloadManager.class);
bind(ParticipantUtils.class);
+ bind(UsersOnline.class).to(UserSessionManager.class).in(Singleton.class);
requestStaticInjection(AccessRightsUtils.class);
+ bind(CronServerTasksManager.class).in(Singleton.class);
+ bind(NotifyService.class).to(NotifyServiceDefault.class).in(Singleton.class);
+ bind(WaveEmailNotifier.class).in(Singleton.class);
bindInterceptor(Matchers.any(), Matchers.annotatedWith(Authenticated.class),
outermostCall(new AuthenticatedMethodInterceptor()));
bindInterceptor(Matchers.any(), Matchers.annotatedWith(Authorizated.class),
Modified: trunk/src/main/java/cc/kune/core/server/UserSessionManager.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/UserSessionManager.java 2011-12-21 23:32:22 UTC (rev 1647)
+++ trunk/src/main/java/cc/kune/core/server/UserSessionManager.java 2011-12-27 01:32:05 UTC (rev 1648)
@@ -19,7 +19,11 @@
*/
package cc.kune.core.server;
+import java.util.HashSet;
+import java.util.Set;
+
import cc.kune.core.server.manager.UserManager;
+import cc.kune.core.server.notifier.UsersOnline;
import cc.kune.domain.User;
import com.google.inject.Inject;
@@ -27,8 +31,9 @@
import com.google.inject.Singleton;
@Singleton
-public class UserSessionManager {
+public class UserSessionManager implements UsersOnline {
+ private final Set<String> logins;
private final UserManager manager;
private final Provider<UserSession> userSessionProv;
@@ -36,12 +41,25 @@
public UserSessionManager(final UserManager manager, final Provider<UserSession> userSessionProv) {
this.manager = manager;
this.userSessionProv = userSessionProv;
+ // For now the implementation of this can be very inaccurate (if we
+ // login/logout several times with different clients) and not scalable
+ // (stored in a MAP). Possible fix, to use jabber status
+ // More info:
+ // http://stackoverflow.com/questions/4592961/how-can-i-check-which-all-users-…
+ //
+ // Best way maybe it's accessing openfire db:
+ // http://www.mastertheboss.com/jboss-howto/45-jboss-persistence/110-jboss-per…
+ logins = new HashSet<String>();
}
public String getHash() {
return getUserSession().getHash();
}
+ private String getUserLoggedShortName() {
+ return getUser().getShortName();
+ }
+
public User getUser() {
return manager.find(getUserSession().getUserId());
}
@@ -50,6 +68,11 @@
return userSessionProv.get();
}
+ @Override
+ public boolean isLogged(final String shortname) {
+ return logins.contains(shortname);
+ }
+
public boolean isUserLoggedIn() {
return getUserSession().getUserId() != null;
}
@@ -61,10 +84,20 @@
public void login(final Long userId, final String newUserHash) {
getUserSession().setUserId(userId);
getUserSession().setHash(newUserHash);
+ updateLoggedUser();
}
public void logout() {
+ if (isUserLoggedIn()) {
+ logins.remove(getUserLoggedShortName());
+ }
getUserSession().setUserId(null);
getUserSession().setHash(null);
}
+
+ public void updateLoggedUser() {
+ if (isUserLoggedIn()) {
+ logins.add(getUserLoggedShortName());
+ }
+ }
}
Modified: trunk/src/main/java/cc/kune/core/server/mail/MailService.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/mail/MailService.java 2011-12-21 23:32:22 UTC (rev 1647)
+++ trunk/src/main/java/cc/kune/core/server/mail/MailService.java 2011-12-27 01:32:05 UTC (rev 1648)
@@ -30,10 +30,10 @@
* the email subject
* @param body
* the body of the email in html format
- * @param to
- * the recipient
+ * @param tos
+ * the recipients
*/
- void sendHtml(FormatedString subject, FormatedString body, String to);
+ void sendHtml(FormatedString subject, FormatedString body, String... tos);
/**
* Sends html email
@@ -47,7 +47,7 @@
* @param tos
* the recipients
*/
- void sendHtml(FormatedString subject, FormatedString body, String from, String... tos);
+ void sendHtml(String from, FormatedString subject, FormatedString body, String... tos);
/**
*
@@ -57,10 +57,10 @@
* the email subject
* @param body
* the body of the email in text format
- * @param to
- * the recipient
+ * @param tos
+ * the recipients
*/
- void sendPlain(FormatedString subject, FormatedString body, String to);
+ void sendPlain(FormatedString subject, FormatedString body, String... tos);
/**
* Sends plain email
@@ -74,6 +74,6 @@
* @param tos
* the recipients
*/
- void sendPlain(FormatedString subject, FormatedString body, String from, String... tos);
+ void sendPlain(String from, FormatedString subject, FormatedString body, String... tos);
}
Modified: trunk/src/main/java/cc/kune/core/server/mail/MailServiceDefault.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/mail/MailServiceDefault.java 2011-12-21 23:32:22 UTC (rev 1647)
+++ trunk/src/main/java/cc/kune/core/server/mail/MailServiceDefault.java 2011-12-27 01:32:05 UTC (rev 1648)
@@ -32,26 +32,55 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import cc.kune.core.client.errors.DefaultException;
+import cc.kune.core.server.LogThis;
import cc.kune.core.server.properties.KuneProperties;
+import com.google.common.base.Preconditions;
import com.google.inject.Inject;
import com.google.inject.Singleton;
@Singleton
+@LogThis
public class MailServiceDefault implements MailService {
public static class FormatedString {
+ public static FormatedString build(final String plainMsg) {
+ return new FormatedString(plainMsg);
+ }
- private final String string;
+ public static FormatedString build(final String template, final Object... args) {
+ return new FormatedString(template, args);
+ }
+ private final Object[] args;
+ private String template;
+
+ public FormatedString(final String plainMsg) {
+ template = plainMsg;
+ args = null;
+ }
+
public FormatedString(final String template, final Object... args) {
- string = String.format(template, args);
+ this.template = template;
+ this.args = args;
}
public String getString() {
- return string;
+ Preconditions.checkNotNull(template, "Template of FormatedString cannot be null");
+ return args == null ? template : String.format(template, args);
}
+
+ public String getTemplate() {
+ return template;
+ }
+
+ /*
+ * Used to translate the template to the user language (when you don't know
+ * already the language of the user)
+ */
+ public void setTemplate(final String template) {
+ this.template = template;
+ }
}
Log log = LogFactory.getLog(MailServiceDefault.class);
@@ -68,8 +97,8 @@
props.put("mail.smtp.host", smtpServer);
}
- private void send(final FormatedString subject, final FormatedString body, final boolean isHtml,
- final String from, final String... tos) {
+ private void send(final String from, final FormatedString subject, final FormatedString body,
+ final boolean isHtml, final String... tos) {
if (smtpSkip) {
return;
}
@@ -79,47 +108,50 @@
// Define message
final MimeMessage message = new MimeMessage(session);
- try {
- message.setFrom(new InternetAddress(from));
- for (final String to : tos) {
+ for (final String to : tos) {
+ try {
+ message.setFrom(new InternetAddress(from));
message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
+ final String formatedSubject = subject.getString();
+ message.setSubject(formatedSubject);
+ final String formatedBody = body.getString();
+ if (isHtml) {
+ message.setContent(formatedBody, "text/html");
+ } else {
+ message.setText(formatedBody);
+ }
+ // Send message
+ Transport.send(message);
+ } catch (final AddressException e) {
+ } catch (final MessagingException e) {
+ final String error = String.format(
+ "Error sendind an email to %s, with subject: %s, and body: %s", from, subject, to);
+ log.error(error, e);
+ // Better not to throw exceptions because users emails can be wrong...
+ // throw new DefaultException(error, e);
}
- final String formatedSubject = subject.getString();
- message.setSubject(formatedSubject);
- final String formatedBody = body.getString();
- if (isHtml) {
- message.setContent(formatedBody, "text/html");
- } else {
- message.setText(formatedBody);
- }
- // Send message
- Transport.send(message);
- } catch (final AddressException e) {
- } catch (final MessagingException e) {
- log.error("Error sending the email", e);
- throw new DefaultException("Error sending an email");
}
}
@Override
- public void sendHtml(final FormatedString subject, final FormatedString body, final String to) {
- send(subject, body, true, smtpDefaultFrom, to);
+ public void sendHtml(final FormatedString subject, final FormatedString body, final String... tos) {
+ send(smtpDefaultFrom, subject, body, true, tos);
}
@Override
- public void sendHtml(final FormatedString subject, final FormatedString body, final String from,
+ public void sendHtml(final String from, final FormatedString subject, final FormatedString body,
final String... tos) {
- send(subject, body, true, from, tos);
+ send(from, subject, body, true, tos);
}
@Override
- public void sendPlain(final FormatedString subject, final FormatedString body, final String to) {
- send(subject, body, false, smtpDefaultFrom, to);
+ public void sendPlain(final FormatedString subject, final FormatedString body, final String... tos) {
+ send(smtpDefaultFrom, subject, body, false, tos);
}
@Override
- public void sendPlain(final FormatedString subject, final FormatedString body, final String from,
+ public void sendPlain(final String from, final FormatedString subject, final FormatedString body,
final String... tos) {
- send(subject, body, false, from, tos);
+ send(from, subject, body, false, tos);
}
}
Added: trunk/src/main/java/cc/kune/core/server/notifier/NotifyService.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/notifier/NotifyService.java (rev 0)
+++ trunk/src/main/java/cc/kune/core/server/notifier/NotifyService.java 2011-12-27 01:32:05 UTC (rev 1648)
@@ -0,0 +1,45 @@
+package cc.kune.core.server.notifier;
+
+import cc.kune.core.server.mail.MailServiceDefault.FormatedString;
+
+/**
+ * The Interface NotifyService.
+ */
+public interface NotifyService {
+
+ /**
+ * Send a message to the recipients (also translate the subject/body using the
+ * user language)
+ *
+ * @param notifyType
+ * the notify type (email, etc)
+ * @param subject
+ * the subject of the message (not translated)
+ * @param body
+ * the body of the message (not translated) but with %s
+ * {@link String.format} args
+ * @param isHtml
+ * if the body is html
+ * @param recipients
+ * the recipients shortnames (without domain)
+ */
+ void send(NotifyType notifyType, FormatedString subject, FormatedString body, boolean isHtml,
+ String... recipients);
+
+ /**
+ * Send a message to the recipients (also translate the subject/body using the
+ * user language)
+ *
+ * @param notifyType
+ * the notify type (email, etc)
+ * @param subject
+ * the subject of the message
+ * @param body
+ * the body of the message (no translated) but with some %s
+ * {@link String.format} args
+ * @param recipients
+ * the recipients shortnames (without domain)
+ */
+ void send(NotifyType notifyType, FormatedString subject, FormatedString body, String... recipients);
+
+}
Added: trunk/src/main/java/cc/kune/core/server/notifier/NotifyServiceDefault.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/notifier/NotifyServiceDefault.java (rev 0)
+++ trunk/src/main/java/cc/kune/core/server/notifier/NotifyServiceDefault.java 2011-12-27 01:32:05 UTC (rev 1648)
@@ -0,0 +1,89 @@
+package cc.kune.core.server.notifier;
+
+import javax.persistence.NoResultException;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import cc.kune.core.server.mail.MailService;
+import cc.kune.core.server.mail.MailServiceDefault.FormatedString;
+import cc.kune.core.server.manager.I18nTranslationManager;
+import cc.kune.core.server.manager.UserManager;
+import cc.kune.core.server.xmpp.XmppManager;
+import cc.kune.domain.User;
+import cc.kune.wave.server.KuneWaveService;
+
+import com.google.inject.Inject;
+import com.google.inject.Singleton;
+
+@Singleton
+public class NotifyServiceDefault implements NotifyService {
+ public static final Log LOG = LogFactory.getLog(NotifyServiceDefault.class);
+ private final I18nTranslationManager i18n;
+ private final MailService mailService;
+ private final UserManager userManager;
+ private final KuneWaveService waveService;
+ private final XmppManager xmppManager;
+
+ @Inject
+ public NotifyServiceDefault(final MailService mailService, final KuneWaveService waveService,
+ final XmppManager xmppManager, final UserManager userManager, final I18nTranslationManager i18n) {
+ this.mailService = mailService;
+ this.waveService = waveService;
+ this.xmppManager = xmppManager;
+ this.userManager = userManager;
+ this.i18n = i18n;
+ }
+
+ @Override
+ public void send(final NotifyType notifyType, final FormatedString subject, final FormatedString body,
+ final boolean isHtml, final String... recipients) {
+ for (final String recipient : recipients) {
+ User user;
+ try {
+ user = userManager.findByShortname(recipient);
+ } catch (final NoResultException e) {
+ LOG.info(String.format("The recipient %s is not a local user, don't notify", recipient));
+ continue;
+ }
+ // Translate per recipient language
+ final String subjectTranslation = i18n.getTranslation(user.getLanguage().getCode(),
+ subject.getTemplate(), "");
+ if (subjectTranslation != null) {
+ subject.setTemplate(subjectTranslation);
+ }
+ final String bodyTranslation = i18n.getTranslation(user.getLanguage().getCode(),
+ body.getTemplate(), "");
+ if (bodyTranslation != null) {
+ body.setTemplate(bodyTranslation);
+ }
+ switch (notifyType) {
+ case chat:
+ xmppManager.sendMessage(recipient,
+ String.format("<b>%s</b>%s", subject.getString(), body.getString()));
+ break;
+ case email:
+ final String email = user.getEmail();
+ if (isHtml) {
+ mailService.sendHtml(subject, body, email);
+ } else {
+ mailService.sendPlain(subject, body, email);
+ }
+ break;
+ case wave:
+ if (isHtml) {
+ LOG.error("Wave html messages not supported yet");
+ }
+ waveService.createWave(subject.getString(), body.getString(), recipient);
+ break;
+ }
+ }
+ }
+
+ @Override
+ public void send(final NotifyType notifyType, final FormatedString subject, final FormatedString body,
+ final String... dests) {
+ send(notifyType, subject, body, false, dests);
+ }
+
+}
Added: trunk/src/main/java/cc/kune/core/server/notifier/NotifyType.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/notifier/NotifyType.java (rev 0)
+++ trunk/src/main/java/cc/kune/core/server/notifier/NotifyType.java 2011-12-27 01:32:05 UTC (rev 1648)
@@ -0,0 +1,9 @@
+package cc.kune.core.server.notifier;
+
+/**
+ * Type of notifications for users
+ *
+ */
+public enum NotifyType {
+ chat, email, wave
+}
Added: trunk/src/main/java/cc/kune/core/server/notifier/UserOnlineSimpleManager.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/notifier/UserOnlineSimpleManager.java (rev 0)
+++ trunk/src/main/java/cc/kune/core/server/notifier/UserOnlineSimpleManager.java 2011-12-27 01:32:05 UTC (rev 1648)
@@ -0,0 +1,5 @@
+package cc.kune.core.server.notifier;
+
+public class UserOnlineSimpleManager {
+
+}
Added: trunk/src/main/java/cc/kune/core/server/notifier/UsersOnline.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/notifier/UsersOnline.java (rev 0)
+++ trunk/src/main/java/cc/kune/core/server/notifier/UsersOnline.java 2011-12-27 01:32:05 UTC (rev 1648)
@@ -0,0 +1,16 @@
+package cc.kune.core.server.notifier;
+
+public interface UsersOnline {
+
+ /**
+ * For now the implementation of this can be very inaccurate (if we
+ * login/logout several times with different clients) and not scalable (stored
+ * in a MAP). Possible fix, to use jabber status
+ *
+ * @param shortname
+ * of the user
+ * @return true if is logged
+ */
+ boolean isLogged(String shortname);
+
+}
Modified: trunk/src/main/java/cc/kune/core/server/properties/KuneBasicProperties.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/properties/KuneBasicProperties.java 2011-12-21 23:32:22 UTC (rev 1647)
+++ trunk/src/main/java/cc/kune/core/server/properties/KuneBasicProperties.java 2011-12-27 01:32:05 UTC (rev 1648)
@@ -62,10 +62,25 @@
return properties.get(KuneProperties.SITE_SHORTNAME);
}
+ /**
+ * Gets the site common name (can be something like "this foo site" not
+ * necessary a domain)
+ *
+ * @return the site common name
+ */
public String getSiteCommonName() {
return properties.get(KuneProperties.SITE_COMMON_NAME);
}
+ /**
+ * Gets the site domain (something like example.org)
+ *
+ * @return the site domain
+ */
+ public String getSiteDomain() {
+ return properties.get(KuneProperties.SITE_DOMAIN);
+ }
+
public String getWelcomewave() {
return properties.get(KuneProperties.WELCOME_WAVE);
}
Modified: trunk/src/main/java/cc/kune/core/server/rack/RackServletFilter.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/rack/RackServletFilter.java 2011-12-21 23:32:22 UTC (rev 1647)
+++ trunk/src/main/java/cc/kune/core/server/rack/RackServletFilter.java 2011-12-27 01:32:05 UTC (rev 1648)
@@ -32,11 +32,14 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.quartz.SchedulerException;
import org.waveprotocol.box.server.rpc.ServerRpcProvider;
import cc.kune.core.server.ServerException;
import cc.kune.core.server.rack.dock.Dock;
import cc.kune.core.server.rack.dock.RequestMatcher;
+import cc.kune.core.server.scheduler.CronServerTasksManager;
+import cc.kune.wave.server.WaveEmailNotifier;
import com.google.inject.Injector;
@@ -137,14 +140,18 @@
final RackBuilder builder = new RackBuilder();
module.configure(builder);
rack = builder.getRack();
- // final WaveStarter waveStarter = new WaveStarter();
- // final Injector waveChildInjector = waveStarter.runMain();
injector = (Injector) filterConfig.getServletContext().getAttribute(INJECTOR_PARENT_ATTRIBUTE);
final Injector kuneChildInjector = installInjector(filterConfig, rack, injector);
startContainerListeners(rack.getListeners(), kuneChildInjector);
docks = rack.getDocks();
excludes = rack.getExcludes();
initFilters(filterConfig);
+ kuneChildInjector.getInstance(WaveEmailNotifier.class);
+ try {
+ kuneChildInjector.getInstance(CronServerTasksManager.class).start();
+ } catch (final SchedulerException e) {
+ LOG.error("Error starting cron scheduler", e);
+ }
LOG.debug("INITIALIZATION DONE!");
}
Modified: trunk/src/main/java/cc/kune/core/server/rpc/UserRPC.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/rpc/UserRPC.java 2011-12-21 23:32:22 UTC (rev 1647)
+++ trunk/src/main/java/cc/kune/core/server/rpc/UserRPC.java 2011-12-27 01:32:05 UTC (rev 1648)
@@ -162,16 +162,14 @@
@Transactional
public void logout(final String userHash) throws DefaultException {
userSessionManager.logout();
- // FIXME final SessionService sessionService =
- // sessionServiceProvider.get();
- // FIXME sessionService.getNewSession();
}
@Override
@Authenticated(mandatory = false)
@Transactional
public void onlyCheckSession(final String userHash) throws DefaultException {
- // Do nothing @Authenticated checks user session
+ // Do almost nothing @Authenticated checks user session
+ userSessionManager.updateLoggedUser();
}
@Override
@@ -179,6 +177,7 @@
@Transactional
public UserInfoDTO reloadUserInfo(final String userHash) throws DefaultException {
final User user = userSessionManager.getUser();
+ userSessionManager.updateLoggedUser();
return loadUserInfo(user);
}
@@ -205,6 +204,7 @@
throw new AccessViolationException();
}
final User userUpdated = userManager.update(id, user, lang);
+ userSessionManager.updateLoggedUser();
return contentRPC.getContent(userHash, userUpdated.getUserGroup().getStateToken());
}
}
Added: trunk/src/main/java/cc/kune/core/server/scheduler/AbstractJob.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/scheduler/AbstractJob.java (rev 0)
+++ trunk/src/main/java/cc/kune/core/server/scheduler/AbstractJob.java 2011-12-27 01:32:05 UTC (rev 1648)
@@ -0,0 +1,26 @@
+package cc.kune.core.server.scheduler;
+
+import static org.quartz.CronScheduleBuilder.cronSchedule;
+import static org.quartz.JobBuilder.newJob;
+import static org.quartz.TriggerBuilder.newTrigger;
+
+import java.text.ParseException;
+
+import org.quartz.CronTrigger;
+import org.quartz.Job;
+import org.quartz.JobDetail;
+import org.quartz.SchedulerException;
+
+public abstract class AbstractJob implements Job {
+ private static final String DEF_GROUP = "groupdef";
+
+ public AbstractJob(final CronServerTasksManager manager, final String cronExpression)
+ throws ParseException, SchedulerException {
+ final JobDetail job = newJob(HourlyJob.class).withIdentity("hourlyjob1", DEF_GROUP).build();
+
+ final CronTrigger trigger = newTrigger().withIdentity("hourlytrigger1", DEF_GROUP).withSchedule(
+ cronSchedule(cronExpression)).build();
+
+ manager.scheduleJob(job, trigger);
+ }
+}
Added: trunk/src/main/java/cc/kune/core/server/scheduler/CronServerTasksManager.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/scheduler/CronServerTasksManager.java (rev 0)
+++ trunk/src/main/java/cc/kune/core/server/scheduler/CronServerTasksManager.java 2011-12-27 01:32:05 UTC (rev 1648)
@@ -0,0 +1,34 @@
+package cc.kune.core.server.scheduler;
+
+import java.util.Date;
+
+import org.quartz.CronTrigger;
+import org.quartz.JobDetail;
+import org.quartz.Scheduler;
+import org.quartz.SchedulerException;
+import org.quartz.impl.StdSchedulerFactory;
+
+import com.google.inject.Inject;
+import com.google.inject.Singleton;
+
+@Singleton
+public class CronServerTasksManager {
+ private final Scheduler sched;
+
+ @Inject
+ public CronServerTasksManager(final StdSchedulerFactory sf) throws SchedulerException {
+ sched = sf.getScheduler();
+ }
+
+ public Date scheduleJob(final JobDetail job, final CronTrigger trigger) throws SchedulerException {
+ return sched.scheduleJob(job, trigger);
+ }
+
+ public void start() throws SchedulerException {
+ sched.start();
+ }
+
+ public void stop() throws SchedulerException {
+ sched.shutdown(true);
+ }
+}
Added: trunk/src/main/java/cc/kune/core/server/scheduler/DailyJob.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/scheduler/DailyJob.java (rev 0)
+++ trunk/src/main/java/cc/kune/core/server/scheduler/DailyJob.java 2011-12-27 01:32:05 UTC (rev 1648)
@@ -0,0 +1,13 @@
+package cc.kune.core.server.scheduler;
+
+import java.text.ParseException;
+
+import org.quartz.SchedulerException;
+
+public abstract class DailyJob extends AbstractJob {
+
+ public DailyJob(final CronServerTasksManager manager) throws ParseException, SchedulerException {
+ super(manager, "0 0 * * * ?");
+ }
+
+}
Added: trunk/src/main/java/cc/kune/core/server/scheduler/HourlyJob.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/scheduler/HourlyJob.java (rev 0)
+++ trunk/src/main/java/cc/kune/core/server/scheduler/HourlyJob.java 2011-12-27 01:32:05 UTC (rev 1648)
@@ -0,0 +1,13 @@
+package cc.kune.core.server.scheduler;
+
+import java.text.ParseException;
+
+import org.quartz.SchedulerException;
+
+public abstract class HourlyJob extends AbstractJob {
+
+ public HourlyJob(final CronServerTasksManager manager) throws ParseException, SchedulerException {
+ super(manager, "0 * * * * ?");
+ }
+
+}
Copied: trunk/src/main/java/cc/kune/core/server/testhelper/ctx (from rev 1647, trunk/src/test/java/cc/kune/core/server/testhelper/ctx)
Added: trunk/src/main/java/cc/kune/core/shared/domain/dto/EmailNotificationFrequency.java
===================================================================
--- trunk/src/main/java/cc/kune/core/shared/domain/dto/EmailNotificationFrequency.java (rev 0)
+++ trunk/src/main/java/cc/kune/core/shared/domain/dto/EmailNotificationFrequency.java 2011-12-27 01:32:05 UTC (rev 1648)
@@ -0,0 +1,29 @@
+/*
+ *
+ * Copyright (C) 2007-2009 The kune development team (see CREDITS for details)
+ * This file is part of kune.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+package cc.kune.core.shared.domain.dto;
+
+import com.google.gwt.user.client.rpc.IsSerializable;
+
+public enum EmailNotificationFrequency implements IsSerializable {
+ daily, // at most daily,
+ hourly, // at most hourly
+ immediately, // almost immediately
+ no // I don't need email notifications
+}
Modified: trunk/src/main/java/cc/kune/core/shared/dto/UserDTO.java
===================================================================
--- trunk/src/main/java/cc/kune/core/shared/dto/UserDTO.java 2011-12-21 23:32:22 UTC (rev 1647)
+++ trunk/src/main/java/cc/kune/core/shared/dto/UserDTO.java 2011-12-27 01:32:05 UTC (rev 1648)
@@ -19,142 +19,153 @@
*/
package cc.kune.core.shared.dto;
+import cc.kune.core.shared.domain.dto.EmailNotificationFrequency;
+
import com.google.gwt.user.client.rpc.IsSerializable;
public class UserDTO implements IsSerializable {
- private Long id;
- private String name;
- private String shortName;
- private I18nLanguageDTO language;
- private I18nCountryDTO country;
- private TimeZoneDTO timezone;
- private String password;
- private String email;
- private String avatar;
- private boolean publishRoster;
- private SubscriptionMode subscriptionMode;
- private String chatColor;
+ private String avatar;
+ private String chatColor;
+ private I18nCountryDTO country;
+ private String email;
+ private EmailNotificationFrequency emailNotifFreq;
+ private Long id;
+ private I18nLanguageDTO language;
+ private String name;
+ private String password;
+ private boolean publishRoster;
+ private String shortName;
+ private SubscriptionMode subscriptionMode;
+ private TimeZoneDTO timezone;
- public UserDTO() {
- this(null, null, null, null, null, null, null, null, true, null, null);
- }
+ public UserDTO() {
+ this(null, null, null, null, null, null, null, null, true, null, null);
+ }
- public UserDTO(final String shortName, final String name, final String password, final String email,
- final I18nLanguageDTO language, final I18nCountryDTO country, final TimeZoneDTO timezone,
- final String avatar, final boolean publishRoster, final SubscriptionMode subscriptionMode,
- final String chatColor) {
- this.name = name;
- this.shortName = shortName;
- this.password = password;
- this.email = email;
- this.language = language;
- this.country = country;
- this.timezone = timezone;
- this.avatar = avatar;
- this.publishRoster = publishRoster;
- this.subscriptionMode = subscriptionMode;
- this.chatColor = chatColor;
- }
+ public UserDTO(final String shortName, final String name, final String password, final String email,
+ final I18nLanguageDTO language, final I18nCountryDTO country, final TimeZoneDTO timezone,
+ final String avatar, final boolean publishRoster, final SubscriptionMode subscriptionMode,
+ final String chatColor) {
+ this.name = name;
+ this.shortName = shortName;
+ this.password = password;
+ this.email = email;
+ this.language = language;
+ this.country = country;
+ this.timezone = timezone;
+ this.avatar = avatar;
+ this.publishRoster = publishRoster;
+ this.subscriptionMode = subscriptionMode;
+ this.chatColor = chatColor;
+ }
- public String getAvatar() {
- return avatar;
- }
+ public String getAvatar() {
+ return avatar;
+ }
- public String getChatColor() {
- return chatColor;
- }
+ public String getChatColor() {
+ return chatColor;
+ }
- public I18nCountryDTO getCountry() {
- return country;
- }
+ public I18nCountryDTO getCountry() {
+ return country;
+ }
- public String getEmail() {
- return email;
- }
+ public String getEmail() {
+ return email;
+ }
- public Long getId() {
- return id;
- }
+ public EmailNotificationFrequency getEmailNotifFreq() {
+ return emailNotifFreq;
+ }
- public I18nLanguageDTO getLanguage() {
- return language;
- }
+ public Long getId() {
+ return id;
+ }
- public String getName() {
- return name;
- }
+ public I18nLanguageDTO getLanguage() {
+ return language;
+ }
- public String getPassword() {
- return password;
- }
+ public String getName() {
+ return name;
+ }
- public String getShortName() {
- return shortName;
- }
+ public String getPassword() {
+ return password;
+ }
- public SubscriptionMode getSubscriptionMode() {
- return subscriptionMode;
- }
+ public String getShortName() {
+ return shortName;
+ }
- public TimeZoneDTO getTimezone() {
- return timezone;
- }
+ public SubscriptionMode getSubscriptionMode() {
+ return subscriptionMode;
+ }
- public boolean isPublishRoster() {
- return publishRoster;
- }
+ public TimeZoneDTO getTimezone() {
+ return timezone;
+ }
- public void setAvatar(final String avatar) {
- this.avatar = avatar;
- }
+ public boolean isPublishRoster() {
+ return publishRoster;
+ }
- public void setChatColor(final String chatColor) {
- this.chatColor = chatColor;
- }
+ public void setAvatar(final String avatar) {
+ this.avatar = avatar;
+ }
- public void setCountry(final I18nCountryDTO country) {
- this.country = country;
- }
+ public void setChatColor(final String chatColor) {
+ this.chatColor = chatColor;
+ }
- public void setEmail(final String email) {
- this.email = email;
- }
+ public void setCountry(final I18nCountryDTO country) {
+ this.country = country;
+ }
- public void setId(final Long id) {
- this.id = id;
- }
+ public void setEmail(final String email) {
+ this.email = email;
+ }
- public void setLanguage(final I18nLanguageDTO language) {
- this.language = language;
- }
+ public void setEmailNotifFreq(final EmailNotificationFrequency emailNotifFreq) {
+ this.emailNotifFreq = emailNotifFreq;
+ }
- public void setName(final String name) {
- this.name = name;
- }
+ public void setId(final Long id) {
+ this.id = id;
+ }
- public void setPassword(final String password) {
- this.password = password;
- }
+ public void setLanguage(final I18nLanguageDTO language) {
+ this.language = language;
+ }
- public void setPublishRoster(final boolean publishRoster) {
- this.publishRoster = publishRoster;
- }
+ public void setName(final String name) {
+ this.name = name;
+ }
- public void setShortName(final String shortName) {
- this.shortName = shortName;
- }
+ public void setPassword(final String password) {
+ this.password = password;
+ }
- public void setSubscriptionMode(final SubscriptionMode subscriptionMode) {
- this.subscriptionMode = subscriptionMode;
- }
+ public void setPublishRoster(final boolean publishRoster) {
+ this.publishRoster = publishRoster;
+ }
- public void setTimezone(final TimeZoneDTO timezone) {
- this.timezone = timezone;
- }
+ public void setShortName(final String shortName) {
+ this.shortName = shortName;
+ }
- @Override
- public String toString() {
- return "UserDTO[" + shortName + "]";
- }
+ public void setSubscriptionMode(final SubscriptionMode subscriptionMode) {
+ this.subscriptionMode = subscriptionMode;
+ }
+ public void setTimezone(final TimeZoneDTO timezone) {
+ this.timezone = timezone;
+ }
+
+ @Override
+ public String toString() {
+ return "UserDTO[" + shortName + "]";
+ }
+
}
Modified: trunk/src/main/java/cc/kune/domain/User.java
===================================================================
--- trunk/src/main/java/cc/kune/domain/User.java 2011-12-21 23:32:22 UTC (rev 1647)
+++ trunk/src/main/java/cc/kune/domain/User.java 2011-12-27 01:32:05 UTC (rev 1648)
@@ -46,6 +46,7 @@
import org.hibernate.validator.Pattern;
import cc.kune.core.shared.domain.UserSNetVisibility;
+import cc.kune.core.shared.domain.dto.EmailNotificationFrequency;
import cc.kune.core.shared.domain.utils.StateToken;
import cc.kune.domain.utils.HasId;
@@ -54,6 +55,8 @@
@Table(name = "kusers")
public class User implements HasId {
+ private static final EmailNotificationFrequency DEF_EMAIL_FREQ = EmailNotificationFrequency.immediately;
+
// public static final String PROPS_ID = "userprops";
// see: http://docs.codehaus.org/display/PICO/Good+Citizen:
// Never expect or return null
@@ -80,14 +83,17 @@
@Length(min = 1)
private String email;
+ @Enumerated(EnumType.STRING)
+ private EmailNotificationFrequency emailNotifFreq;
+
+ // @OneToOne(cascade = CascadeType.REMOVE)
+ // private final CustomProperties customProperties;
+
@Id
@DocumentId
@GeneratedValue
private Long id;
- // @OneToOne(cascade = CascadeType.REMOVE)
- // private final CustomProperties customProperties;
-
@ManyToOne
@NotNull
private I18nLanguage language;
@@ -146,6 +152,7 @@
sNetVisibility = UserSNetVisibility.anyone;
this.createdOn = System.currentTimeMillis();
this.lastLogin = null;
+ emailNotifFreq = DEF_EMAIL_FREQ;
// this.properties = properties;
}
@@ -204,6 +211,10 @@
// return customProperties;
// }
+ public EmailNotificationFrequency getEmailNotifFreq() {
+ return emailNotifFreq == null ? DEF_EMAIL_FREQ : emailNotifFreq;
+ }
+
public boolean getHasLogo() {
return hasLogo();
}
@@ -229,14 +240,14 @@
return password;
}
+ // public Properties getProperties() {
+ // return properties;
+ // }
+
public byte[] getSalt() {
return salt;
}
- // public Properties getProperties() {
- // return properties;
- // }
-
public String getShortName() {
return shortName;
}
@@ -283,6 +294,10 @@
this.email = email;
}
+ public void setEmailNotifFreq(final EmailNotificationFrequency emailNotifFreq) {
+ this.emailNotifFreq = emailNotifFreq;
+ }
+
@Override
public void setId(final Long id) {
this.id = id;
Modified: trunk/src/main/java/cc/kune/events/client/actions/EventAddMenuItem.java
===================================================================
--- trunk/src/main/java/cc/kune/events/client/actions/EventAddMenuItem.java 2011-12-21 23:32:22 UTC (rev 1647)
+++ trunk/src/main/java/cc/kune/events/client/actions/EventAddMenuItem.java 2011-12-27 01:32:05 UTC (rev 1648)
@@ -28,7 +28,7 @@
super(AccessRolDTO.Editor, true);
this.i18n = i18n;
this.calendar = calendar;
- withText(i18n.t("Add a appointment")).withIcon(res.calendarAdd());
+ withText(i18n.t("Add an appointment")).withIcon(res.calendarAdd());
}
@Override
Modified: trunk/src/main/java/cc/kune/events/client/viewer/CalendarViewerPresenter.java
===================================================================
--- trunk/src/main/java/cc/kune/events/client/viewer/CalendarViewerPresenter.java 2011-12-21 23:32:22 UTC (rev 1647)
+++ trunk/src/main/java/cc/kune/events/client/viewer/CalendarViewerPresenter.java 2011-12-27 01:32:05 UTC (rev 1648)
@@ -139,6 +139,7 @@
event.setCancelled(!editable);
// event.setCancelled(true);
NotifyUser.info("updated handler");
+ hideMenu();
}
});
getView().addOpenHandler(new OpenHandler<Appointment>() {
@@ -194,7 +195,7 @@
getView().goToday();
}
- private void hide() {
+ private void hideMenu() {
onOverMenu.get().hide();
}
Modified: trunk/src/main/java/cc/kune/wave/server/KuneAgent.java
===================================================================
--- trunk/src/main/java/cc/kune/wave/server/KuneAgent.java 2011-12-21 23:32:22 UTC (rev 1647)
+++ trunk/src/main/java/cc/kune/wave/server/KuneAgent.java 2011-12-27 01:32:05 UTC (rev 1648)
@@ -81,6 +81,12 @@
}
@Override
+ public WaveRef createWave(final String title, final String message, final String... participantsArray) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
public WaveRef createWave(final String title, final String message, final String waveIdToCopy,
final URL gadgetUrl, final ParticipantId... participantsArray) {
// TODO Auto-generated method stub
Modified: trunk/src/main/java/cc/kune/wave/server/KuneWaveService.java
===================================================================
--- trunk/src/main/java/cc/kune/wave/server/KuneWaveService.java 2011-12-21 23:32:22 UTC (rev 1647)
+++ trunk/src/main/java/cc/kune/wave/server/KuneWaveService.java 2011-12-27 01:32:05 UTC (rev 1648)
@@ -41,6 +41,8 @@
WaveRef createWave(String title, String message, ParticipantId... participantsArray);
+ WaveRef createWave(String title, String message, String... participantsArray);
+
WaveRef createWave(String title, String message, String waveIdToCopy, URL gadgetUrl,
ParticipantId... participantsArray);
Modified: trunk/src/main/java/cc/kune/wave/server/KuneWaveServiceDefault.java
===================================================================
--- trunk/src/main/java/cc/kune/wave/server/KuneWaveServiceDefault.java 2011-12-21 23:32:22 UTC (rev 1647)
+++ trunk/src/main/java/cc/kune/wave/server/KuneWaveServiceDefault.java 2011-12-27 01:32:05 UTC (rev 1648)
@@ -221,6 +221,11 @@
}
@Override
+ public WaveRef createWave(final String title, final String message, final String... participantsArray) {
+ return createWave(title, message, participantUtils.listFrom(participantsArray));
+ }
+
+ @Override
public WaveRef createWave(@Nonnull final String title, final String message,
final String waveIdToCopy, final URL gadgetUrl, @Nonnull final ParticipantId... participantsArray) {
String newWaveId = null;
Modified: trunk/src/main/java/cc/kune/wave/server/ParticipantUtils.java
===================================================================
--- trunk/src/main/java/cc/kune/wave/server/ParticipantUtils.java 2011-12-21 23:32:22 UTC (rev 1647)
+++ trunk/src/main/java/cc/kune/wave/server/ParticipantUtils.java 2011-12-27 01:32:05 UTC (rev 1648)
@@ -37,6 +37,7 @@
@Singleton
public class ParticipantUtils {
+ private String atDomain;
private final String domain;
private final ParticipantId superAdmin;
@@ -47,10 +48,26 @@
superAdmin = ofImpl(databaseProperties.getAdminShortName());
}
+ public String getAddressName(final String address) {
+ return address.contains(ParticipantId.DOMAIN_PREFIX) ? address.split(ParticipantId.DOMAIN_PREFIX)[0]
+ : address;
+ }
+
+ private String getAtDomain() {
+ if (atDomain == null) {
+ atDomain = ParticipantId.DOMAIN_PREFIX + domain;
+ }
+ return atDomain;
+ }
+
public ParticipantId getSuperAdmin() {
return superAdmin;
}
+ public boolean isLocal(final String address) {
+ return address.contains(getAtDomain());
+ }
+
public ParticipantId[] listFrom(final Set<Group> list) {
final ParticipantId[] array = new ParticipantId[list.size()];
final Iterator<Group> iterator = list.iterator();
@@ -60,6 +77,14 @@
return array;
}
+ public ParticipantId[] listFrom(final String... list) {
+ final ParticipantId[] array = new ParticipantId[list.length];
+ for (int i = 0; i < list.length; i++) {
+ array[i] = of(list[i]);
+ }
+ return array;
+ }
+
public ParticipantId of(final String username) {
return ofImpl(username);
}
@@ -69,7 +94,7 @@
if (username.contains(ParticipantId.DOMAIN_PREFIX)) {
return ParticipantId.of(username);
} else {
- return ParticipantId.of(username + ParticipantId.DOMAIN_PREFIX + domain);
+ return ParticipantId.of(username + getAtDomain());
}
} catch (final InvalidParticipantAddress e) {
throw new DefaultException("Error getting Wave participant Id");
Added: trunk/src/main/java/cc/kune/wave/server/WaveEmailNotifier.java
===================================================================
--- trunk/src/main/java/cc/kune/wave/server/WaveEmailNotifier.java (rev 0)
+++ trunk/src/main/java/cc/kune/wave/server/WaveEmailNotifier.java 2011-12-27 01:32:05 UTC (rev 1648)
@@ -0,0 +1,75 @@
+package cc.kune.wave.server;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.waveprotocol.box.common.DeltaSequence;
+import org.waveprotocol.box.server.waveserver.WaveBus;
+import org.waveprotocol.box.server.waveserver.WaveBus.Subscriber;
+import org.waveprotocol.wave.model.id.IdUtil;
+import org.waveprotocol.wave.model.id.WaveletId;
+import org.waveprotocol.wave.model.id.WaveletName;
+import org.waveprotocol.wave.model.operation.wave.AddParticipant;
+import org.waveprotocol.wave.model.operation.wave.TransformedWaveletDelta;
+import org.waveprotocol.wave.model.operation.wave.WaveletBlipOperation;
+import org.waveprotocol.wave.model.operation.wave.WaveletOperation;
+import org.waveprotocol.wave.model.version.HashedVersion;
+import org.waveprotocol.wave.model.wave.ParticipantId;
+import org.waveprotocol.wave.model.wave.data.ReadableWaveletData;
+import org.waveprotocol.wave.model.waveref.WaveRef;
+
+import cc.kune.core.server.LogThis;
+import cc.kune.core.server.mail.MailServiceDefault.FormatedString;
+import cc.kune.core.server.notifier.NotifyService;
+import cc.kune.core.server.notifier.NotifyType;
+import cc.kune.core.server.notifier.UsersOnline;
+import cc.kune.core.server.properties.KuneBasicProperties;
+
+import com.google.inject.Inject;
+
+@LogThis
+public class WaveEmailNotifier {
+ public static final Log LOG = LogFactory.getLog(WaveEmailNotifier.class);
+
+ @Inject
+ public WaveEmailNotifier(final WaveBus waveBus, final NotifyService notifyService,
+ final UsersOnline usersOnline, final KuneBasicProperties basicProperties,
+ final ParticipantUtils partUtils) {
+ waveBus.subscribe(new Subscriber() {
+ @Override
+ public void waveletCommitted(final WaveletName waveletName, final HashedVersion version) {
+ }
+
+ @Override
+ public void waveletUpdate(final ReadableWaveletData wavelet, final DeltaSequence deltas) {
+ final WaveletId waveletId = wavelet.getWaveletId();
+ if (IdUtil.isUserDataWavelet(waveletId)) {
+ return;
+ }
+ for (final TransformedWaveletDelta delta : deltas) {
+ for (final WaveletOperation op : delta) {
+ if (op instanceof AddParticipant) {
+ final ParticipantId user = ((AddParticipant) op).getParticipantId();
+ final String url = KuneWaveUtils.getUrl(WaveRef.of(wavelet.getWaveId(), waveletId));
+ final FormatedString body = FormatedString.build(
+ // FIXME when SSL/ssl support
+ "Hi there,<br><br>You have a new message in %s. <a href=\"http://%s/#%s\">Read more</a>.<br>",
+ basicProperties.getSiteCommonName(), basicProperties.getSiteDomain(), url);
+ final String address = user.getAddress();
+ if (partUtils.isLocal(address)) {
+ final String userName = partUtils.getAddressName(address);
+ if (!usersOnline.isLogged(userName)) {
+ notifyService.send(NotifyType.email, FormatedString.build("You have a new message"),
+ body, true, userName);
+ notifyService.send(NotifyType.chat, FormatedString.build("New message"), body, true,
+ userName);
+ }
+ }
+ } else if (op instanceof WaveletBlipOperation) {
+
+ }
+ }
+ }
+ }
+ });
+ }
+}
Modified: trunk/src/main/resources/kune.properties
===================================================================
--- trunk/src/main/resources/kune.properties 2011-12-21 23:32:22 UTC (rev 1647)
+++ trunk/src/main/resources/kune.properties 2011-12-27 01:32:05 UTC (rev 1648)
@@ -27,7 +27,7 @@
kune.site.smtp.host = localhost
kune.site.smtp.defaultfrom = noreply@localhost
# If we should avoid the use of smtp (use only for avoid emails during development)
-kune.site.smtp.skip = true
+kune.site.smtp.skip = false
### Database
Added: trunk/src/test/java/cc/kune/core/server/mail/MailServiceDefaultTest.java
===================================================================
--- trunk/src/test/java/cc/kune/core/server/mail/MailServiceDefaultTest.java (rev 0)
+++ trunk/src/test/java/cc/kune/core/server/mail/MailServiceDefaultTest.java 2011-12-27 01:32:05 UTC (rev 1648)
@@ -0,0 +1,43 @@
+package cc.kune.core.server.mail;
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import cc.kune.core.server.mail.MailServiceDefault.FormatedString;
+import cc.kune.core.server.properties.KunePropertiesDefault;
+
+public class MailServiceDefaultTest {
+
+ private MailServiceDefault service;
+
+ @Test(expected = NullPointerException.class)
+ public void basicException() {
+ assertEquals(null, FormatedString.build(null).getString());
+ }
+
+ @Test(expected = NullPointerException.class)
+ public void basicExceptionWithArgs() {
+ assertEquals(null, FormatedString.build(null).getString());
+ assertEquals(null, FormatedString.build(null, "arg").getString());
+ }
+
+ @Test
+ public void basicFormat() {
+ assertEquals("basic", FormatedString.build("basic").getString());
+ assertEquals("basic arg", FormatedString.build("basic %s", "arg").getString());
+ assertEquals("basic %s", FormatedString.build("basic %s", null).getString());
+ }
+
+ @Before
+ public void before() {
+ service = new MailServiceDefault(new KunePropertiesDefault("kune.properties"));
+ }
+
+ @Test
+ public void simpleTest() {
+ service.sendPlain(FormatedString.build("Some test subject"), FormatedString.build("Some body"),
+ "vjrj@localhost");
+ }
+}
1
0
r1647 - in trunk: script src/main/java/cc/kune/events/client/actions src/main/java/cc/kune/events/client/viewer
by Vicente J. Ruiz Jurado 21 Dec '11
by Vicente J. Ruiz Jurado 21 Dec '11
21 Dec '11
Author: vjrj_
Date: 2011-12-22 00:32:22 +0100 (Thu, 22 Dec 2011)
New Revision: 1647
Added:
trunk/script/make-release-tar.sh
trunk/src/main/java/cc/kune/events/client/actions/EventAddMenuItem.java
trunk/src/main/java/cc/kune/events/client/actions/EventEditMenuItem.java
trunk/src/main/java/cc/kune/events/client/actions/EventRemoveMenuItem.java
Removed:
trunk/src/main/java/cc/kune/events/client/viewer/EventAddMenuItem.java
trunk/src/main/java/cc/kune/events/client/viewer/EventEditMenuItem.java
trunk/src/main/java/cc/kune/events/client/viewer/EventRemoveMenuItem.java
Modified:
trunk/src/main/java/cc/kune/events/client/actions/EventsClientActions.java
trunk/src/main/java/cc/kune/events/client/viewer/CalendarViewerPanel.java
trunk/src/main/java/cc/kune/events/client/viewer/CalendarViewerPresenter.java
Log:
Calendar GUI updated
Added: trunk/script/make-release-tar.sh
===================================================================
--- trunk/script/make-release-tar.sh (rev 0)
+++ trunk/script/make-release-tar.sh 2011-12-21 23:32:22 UTC (rev 1647)
@@ -0,0 +1,6 @@
+# mkdir temp temp/etc tmp/bin
+target/../ws/ bin/server.sh
+wget 'http://ourproject.org/plugins/scmsvn/viewcvs.php/*checkout*/trunk/src/main/…' -O jaas.config
+wget 'http://ourproject.org/plugins/scmsvn/viewcvs.php/*checkout*/trunk/src/main/…' -O kune.properties
+wget 'http://ourproject.org/plugins/scmsvn/viewcvs.php/*checkout*/trunk/src/main/…' -O wave-server.properties
+tar
Copied: trunk/src/main/java/cc/kune/events/client/actions/EventAddMenuItem.java (from rev 1646, trunk/src/main/java/cc/kune/events/client/viewer/EventAddMenuItem.java)
===================================================================
--- trunk/src/main/java/cc/kune/events/client/actions/EventAddMenuItem.java (rev 0)
+++ trunk/src/main/java/cc/kune/events/client/actions/EventAddMenuItem.java 2011-12-21 23:32:22 UTC (rev 1647)
@@ -0,0 +1,74 @@
+package cc.kune.events.client.actions;
+
+import cc.kune.common.client.actions.ActionEvent;
+import cc.kune.common.client.actions.ui.descrip.MenuItemDescriptor;
+import cc.kune.common.client.notify.NotifyUser;
+import cc.kune.common.client.ui.dialogs.PromptTopDialog;
+import cc.kune.common.client.ui.dialogs.PromptTopDialog.Builder;
+import cc.kune.common.shared.i18n.I18nTranslationService;
+import cc.kune.core.client.actions.RolAction;
+import cc.kune.core.client.resources.nav.NavResources;
+import cc.kune.core.shared.dto.AccessRolDTO;
+import cc.kune.events.client.viewer.CalendarViewer;
+
+import com.google.gwt.event.dom.client.ClickEvent;
+import com.google.gwt.event.dom.client.ClickHandler;
+import com.google.inject.Inject;
+import com.google.inject.Provider;
+
+public class EventAddMenuItem extends MenuItemDescriptor {
+ public static class EventAddAction extends RolAction {
+ private final Provider<CalendarViewer> calendar;
+ private PromptTopDialog dialog;
+ private final I18nTranslationService i18n;
+
+ @Inject
+ public EventAddAction(final NavResources res, final I18nTranslationService i18n,
+ final Provider<CalendarViewer> calendar) {
+ super(AccessRolDTO.Editor, true);
+ this.i18n = i18n;
+ this.calendar = calendar;
+ withText(i18n.t("Add a appointment")).withIcon(res.calendarAdd());
+ }
+
+ @Override
+ public void actionPerformed(final ActionEvent event) {
+ if (dialog == null) {
+ final Builder builder = new PromptTopDialog.Builder(CREATE_APP_ID,
+ i18n.t("Description of the appointment"), true, true, i18n.getDirection());
+ builder.firstButtonTitle(i18n.t("Add")).firstButtonId(CREATE_APP_ADD_ID);
+ builder.sndButtonTitle(i18n.t("Cancel")).sndButtonId(CREATE_APP_CANCEL_ID);
+ dialog = builder.build();
+ dialog.getFirstBtn().addClickHandler(new ClickHandler() {
+ @Override
+ public void onClick(final ClickEvent event) {
+ if (dialog.isValid()) {
+ calendar.get().addAppointment(dialog.getTextFieldValue(), calendar.get().getOnOverDate());
+ NotifyUser.info("Appointment added but not yet saved (this is under development)");
+ dialog.hide();
+ }
+ }
+ });
+ dialog.getSecondBtn().addClickHandler(new ClickHandler() {
+ @Override
+ public void onClick(final ClickEvent event) {
+ dialog.hide();
+ }
+ });
+ }
+ dialog.clearTextFieldValue();
+ dialog.showCentered();
+ dialog.focusOnTextBox();
+ }
+ }
+
+ public static final String CREATE_APP_ADD_ID = "event-add-menu-item-add-btn";
+ public static final String CREATE_APP_CANCEL_ID = "event-add-menu-item-add-btn";
+ public static final String CREATE_APP_ID = "event-add-menu-item-form";
+
+ @Inject
+ public EventAddMenuItem(final EventAddAction action, final CalendarOnOverMenu cal) {
+ super(action);
+ setParent(cal.get());
+ }
+}
Copied: trunk/src/main/java/cc/kune/events/client/actions/EventEditMenuItem.java (from rev 1646, trunk/src/main/java/cc/kune/events/client/viewer/EventEditMenuItem.java)
===================================================================
--- trunk/src/main/java/cc/kune/events/client/actions/EventEditMenuItem.java (rev 0)
+++ trunk/src/main/java/cc/kune/events/client/actions/EventEditMenuItem.java 2011-12-21 23:32:22 UTC (rev 1647)
@@ -0,0 +1,53 @@
+package cc.kune.events.client.actions;
+
+import cc.kune.common.client.actions.ActionEvent;
+import cc.kune.common.client.actions.ui.descrip.MenuItemDescriptor;
+import cc.kune.common.client.notify.NotifyUser;
+import cc.kune.common.client.ui.dialogs.PromptTopDialog;
+import cc.kune.common.client.utils.TextUtils;
+import cc.kune.common.shared.i18n.I18nTranslationService;
+import cc.kune.core.client.actions.RolAction;
+import cc.kune.core.client.resources.nav.NavResources;
+import cc.kune.core.shared.dto.AccessRolDTO;
+import cc.kune.events.client.viewer.CalendarStateChangeEvent;
+import cc.kune.events.client.viewer.CalendarViewer;
+
+import com.google.gwt.event.shared.EventBus;
+import com.google.inject.Inject;
+import com.google.inject.Provider;
+
+public class EventEditMenuItem extends MenuItemDescriptor {
+ public static class EventEditAction extends RolAction {
+ private final Provider<CalendarViewer> calendar;
+ private PromptTopDialog dialog;
+ private final I18nTranslationService i18n;
+
+ @Inject
+ public EventEditAction(final NavResources res, final I18nTranslationService i18n,
+ final Provider<CalendarViewer> calendar, final EventBus eventBus) {
+ super(AccessRolDTO.Administrator, true);
+ this.i18n = i18n;
+ this.calendar = calendar;
+ withText(i18n.t("Edit the appointment")).withIcon(res.go());
+ eventBus.addHandler(CalendarStateChangeEvent.getType(),
+ new CalendarStateChangeEvent.CalendarStateChangeHandler() {
+ @Override
+ public void onCalendarStateChange(final CalendarStateChangeEvent event) {
+ // if the calendar is not selecting a appointment don't show this
+ setEnabled(!calendar.get().getAppToEdit().equals(CalendarViewer.NO_APPOINT));
+ }
+ });
+ }
+
+ @Override
+ public void actionPerformed(final ActionEvent event) {
+ NotifyUser.info(i18n.t(TextUtils.IN_DEVELOPMENT));
+ }
+ }
+
+ @Inject
+ public EventEditMenuItem(final EventEditAction action, final CalendarOnOverMenu cal) {
+ super(action);
+ setParent(cal.get());
+ }
+}
Copied: trunk/src/main/java/cc/kune/events/client/actions/EventRemoveMenuItem.java (from rev 1646, trunk/src/main/java/cc/kune/events/client/viewer/EventRemoveMenuItem.java)
===================================================================
--- trunk/src/main/java/cc/kune/events/client/actions/EventRemoveMenuItem.java (rev 0)
+++ trunk/src/main/java/cc/kune/events/client/actions/EventRemoveMenuItem.java 2011-12-21 23:32:22 UTC (rev 1647)
@@ -0,0 +1,56 @@
+package cc.kune.events.client.actions;
+
+import cc.kune.common.client.actions.ActionEvent;
+import cc.kune.common.client.actions.ui.descrip.MenuItemDescriptor;
+import cc.kune.common.client.notify.NotifyUser;
+import cc.kune.common.client.ui.dialogs.PromptTopDialog;
+import cc.kune.common.client.utils.TextUtils;
+import cc.kune.common.shared.i18n.I18nTranslationService;
+import cc.kune.core.client.actions.RolAction;
+import cc.kune.core.client.resources.CoreResources;
+import cc.kune.core.shared.dto.AccessRolDTO;
+import cc.kune.events.client.viewer.CalendarStateChangeEvent;
+import cc.kune.events.client.viewer.CalendarViewer;
+
+import com.google.gwt.event.shared.EventBus;
+import com.google.inject.Inject;
+import com.google.inject.Provider;
+
+public class EventRemoveMenuItem extends MenuItemDescriptor {
+ public static class EventEditAction extends RolAction {
+ private final Provider<CalendarViewer> calendar;
+ private PromptTopDialog dialog;
+ private final I18nTranslationService i18n;
+
+ @Inject
+ public EventEditAction(final CoreResources res, final I18nTranslationService i18n,
+ final Provider<CalendarViewer> calendar, final EventBus eventBus) {
+ super(AccessRolDTO.Editor, true);
+ this.i18n = i18n;
+ this.calendar = calendar;
+ withText(i18n.t("Remove this appointment")).withIcon(res.cancel());
+ eventBus.addHandler(CalendarStateChangeEvent.getType(),
+ new CalendarStateChangeEvent.CalendarStateChangeHandler() {
+ @Override
+ public void onCalendarStateChange(final CalendarStateChangeEvent event) {
+ setEnabled(!calendar.get().getAppToEdit().equals(CalendarViewer.NO_APPOINT));
+ }
+ });
+ }
+
+ @Override
+ public void actionPerformed(final ActionEvent event) {
+ NotifyUser.info(i18n.t(TextUtils.IN_DEVELOPMENT));
+ }
+ }
+
+ public static final String CREATE_APP_ADD_ID = "event-add-menu-item-add-btn";
+ public static final String CREATE_APP_CANCEL_ID = "event-add-menu-item-add-btn";
+ public static final String CREATE_APP_ID = "event-add-menu-item-form";
+
+ @Inject
+ public EventRemoveMenuItem(final EventEditAction action, final CalendarOnOverMenu cal) {
+ super(action);
+ setParent(cal.get());
+ }
+}
Modified: trunk/src/main/java/cc/kune/events/client/actions/EventsClientActions.java
===================================================================
--- trunk/src/main/java/cc/kune/events/client/actions/EventsClientActions.java 2011-12-21 17:45:17 UTC (rev 1646)
+++ trunk/src/main/java/cc/kune/events/client/actions/EventsClientActions.java 2011-12-21 23:32:22 UTC (rev 1647)
@@ -26,8 +26,6 @@
import cc.kune.core.client.resources.CoreResources;
import cc.kune.core.client.state.Session;
import cc.kune.core.client.state.StateManager;
-import cc.kune.events.client.viewer.EventAddMenuItem;
-import cc.kune.events.client.viewer.EventEditMenuItem;
import cc.kune.gspace.client.actions.AbstractFoldableToolActions;
import cc.kune.gspace.client.actions.ActionGroups;
import cc.kune.gspace.client.actions.ContentViewerOptionsMenu;
@@ -56,6 +54,7 @@
final Provider<Calendar7DaysViewSelectBtn> cal7DaysBtn,
final Provider<CalendarMonthViewSelectBtn> calMonthBtn,
final Provider<EventAddMenuItem> eventAddMenuItem,
+ final Provider<EventRemoveMenuItem> eventRemoveMenuItem,
final Provider<EventEditMenuItem> eventEditMenuItem, final Provider<CalendarGoPrevBtn> calPrevBtn,
final Provider<CalendarGoNextBtn> calNextBtn, final CalendarOnOverMenu onOverMenu,
final Provider<CalendarGoTodayBtn> goToday, final Provider<RefreshContentMenuItem> refresh) {
@@ -74,6 +73,7 @@
actionsRegistry.addAction(ActionGroups.TOOLBAR, onOverMenu, containers);
eventAddMenuItem.get();
eventEditMenuItem.get();
+ eventRemoveMenuItem.get();
// For now, commented:
// actionsRegistry.addAction(ActionGroups.TOOLBAR, newMeetingsBtn,
Modified: trunk/src/main/java/cc/kune/events/client/viewer/CalendarViewerPanel.java
===================================================================
--- trunk/src/main/java/cc/kune/events/client/viewer/CalendarViewerPanel.java 2011-12-21 17:45:17 UTC (rev 1646)
+++ trunk/src/main/java/cc/kune/events/client/viewer/CalendarViewerPanel.java 2011-12-21 23:32:22 UTC (rev 1647)
@@ -24,6 +24,7 @@
import com.bradrydzewski.gwt.calendar.client.event.MouseOverHandler;
import com.bradrydzewski.gwt.calendar.client.event.TimeBlockClickHandler;
import com.bradrydzewski.gwt.calendar.client.event.UpdateHandler;
+import com.google.gwt.dom.client.NativeEvent;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.DoubleClickHandler;
@@ -32,12 +33,16 @@
import com.google.gwt.event.shared.GwtEvent;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.user.client.Event;
+import com.google.gwt.user.client.Event.NativePreviewEvent;
+import com.google.gwt.user.client.Event.NativePreviewHandler;
import com.google.inject.Inject;
import com.google.inject.Provider;
public class CalendarViewerPanel extends AbstractFolderViewerPanel implements CalendarViewerView {
private final Calendar calendar;
+ private int clientX;
+ private int clientY;
@Inject
public CalendarViewerPanel(final GSpaceArmor gsArmor, final I18nTranslationService i18n,
@@ -46,12 +51,21 @@
final Provider<FolderViewerDropController> dropControllerProv) {
super(gsArmor, i18n, capabilitiesRegistry, dragController, dropControllerProv);
calendar = new Calendar();
- // calendar.setWidth("auto");
- // calendar.setHeight("auto");
widget = calendar;
calendar.sinkEvents(Event.ONMOUSEDOWN | Event.ONDBLCLICK | Event.KEYEVENTS | Event.ONMOUSEOVER
| Event.ONCLICK);
-
+ Event.addNativePreviewHandler(new NativePreviewHandler() {
+ @Override
+ public void onPreviewNativeEvent(final NativePreviewEvent eventPrev) {
+ // We store click position in onder to show the menu
+ final NativeEvent natEvent = eventPrev.getNativeEvent();
+ if (Event.getTypeInt(natEvent.getType()) != Event.ONCLICK) {
+ clientX = natEvent.getClientX();
+ clientY = natEvent.getClientY();
+ return;
+ }
+ }
+ });
}
@Override
@@ -149,6 +163,16 @@
}
@Override
+ public int getClientX() {
+ return clientX;
+ }
+
+ @Override
+ public int getClientY() {
+ return clientY;
+ }
+
+ @Override
public Date getDate() {
return calendar.getDate();
}
Modified: trunk/src/main/java/cc/kune/events/client/viewer/CalendarViewerPresenter.java
===================================================================
--- trunk/src/main/java/cc/kune/events/client/viewer/CalendarViewerPresenter.java 2011-12-21 17:45:17 UTC (rev 1646)
+++ trunk/src/main/java/cc/kune/events/client/viewer/CalendarViewerPresenter.java 2011-12-21 23:32:22 UTC (rev 1647)
@@ -6,7 +6,9 @@
import cc.kune.common.client.actions.ui.descrip.Position;
import cc.kune.common.client.notify.NotifyUser;
-import cc.kune.common.client.tooltip.Tooltip;
+import cc.kune.common.shared.i18n.I18nTranslationService;
+import cc.kune.core.client.state.Session;
+import cc.kune.core.client.state.StateManager;
import cc.kune.core.shared.dto.HasContent;
import cc.kune.events.client.actions.CalendarOnOverMenu;
import cc.kune.gspace.client.viewers.AbstractFolderViewerView;
@@ -28,7 +30,6 @@
import com.bradrydzewski.gwt.calendar.client.event.TimeBlockClickHandler;
import com.bradrydzewski.gwt.calendar.client.event.UpdateEvent;
import com.bradrydzewski.gwt.calendar.client.event.UpdateHandler;
-import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.logical.shared.HasOpenHandlers;
import com.google.gwt.event.logical.shared.HasSelectionHandlers;
@@ -38,7 +39,6 @@
import com.google.gwt.event.logical.shared.SelectionHandler;
import com.google.gwt.event.shared.EventBus;
import com.google.gwt.event.shared.HandlerRegistration;
-import com.google.gwt.user.client.ui.Widget;
import com.google.gwt.user.datepicker.client.CalendarUtil;
import com.google.inject.Inject;
import com.gwtplatform.mvp.client.Presenter;
@@ -65,6 +65,10 @@
HandlerRegistration addCreateHandler(CreateHandler<Appointment> handler);
+ int getClientX();
+
+ int getClientY();
+
Date getDate();
void goToday();
@@ -74,7 +78,6 @@
void setView(CalendarViews view);
void setView(CalendarViews view, int days);
-
}
private static final CalendarViews DEF_VIEW = CalendarViews.DAY;
@@ -83,16 +86,23 @@
private CalendarViews currentCalView;
private int currentDaysView = 7;
private final FolderViewerUtils folderViewerUtils;
+ private final I18nTranslationService i18n;
private Date onOverDate;
private final CalendarOnOverMenu onOverMenu;
+ private final Session session;
+ private final StateManager stateManager;
@Inject
public CalendarViewerPresenter(final EventBus eventBus, final CalendarViewerView view,
final CalendarViewerProxy proxy, final FolderViewerUtils folderViewerUtils,
- final CalendarOnOverMenu onOverMenu) {
+ final CalendarOnOverMenu onOverMenu, final Session session, final StateManager stateManager,
+ final I18nTranslationService i18n) {
super(eventBus, view, proxy);
this.folderViewerUtils = folderViewerUtils;
this.onOverMenu = onOverMenu;
+ this.session = session;
+ this.stateManager = stateManager;
+ this.i18n = i18n;
addListeners();
setViewImpl(DEF_VIEW, currentDaysView);
}
@@ -113,30 +123,21 @@
showMenu();
}
});
- getView().addClickHandler(new ClickHandler() {
- @Override
- public void onClick(final ClickEvent event) {
- setMenuPosition(event.getClientX(), event.getClientY());
- }
-
- });
getView().addMouseOverHandler(new MouseOverHandler<Appointment>() {
@Override
public void onMouseOver(final MouseOverEvent<Appointment> event) {
- NotifyUser.info("on mouse over");
- // final Element element = (Element) event.getElement();
- // showMenu(element.getAbsoluteLeft() + 10, element.getAbsoluteTop() +
- // 10);
- Tooltip.to((Widget) event.getElement(), "kk");
- // final Tooltip tooltip = new Tooltip();
- // tooltip.setText("lalala");
- // tooltip.setPopupPosition(, currentDaysView)
- // tooltip.showRelativeTo((UIObject) event.getElement());
+ // NotifyUser.info("on mouse over");
}
});
getView().addUpdateHandler(new UpdateHandler<Appointment>() {
@Override
public void onUpdate(final UpdateEvent<Appointment> event) {
+ final boolean editable = session.getCurrentState().getGroupRights().isEditable();
+ if (!editable) {
+ NotifyUser.error(i18n.t("Only members can update events"));
+ }
+ event.setCancelled(!editable);
+ // event.setCancelled(true);
NotifyUser.info("updated handler");
}
});
@@ -154,7 +155,6 @@
NotifyUser.info("on selection");
updateMenuItems();
showMenu();
- // getView().removeAppointment(event.getSelectedItem());
}
});
}
@@ -194,6 +194,10 @@
getView().goToday();
}
+ private void hide() {
+ onOverMenu.get().hide();
+ }
+
@Override
public void increment() {
incrementDate(true);
@@ -255,6 +259,7 @@
}
private void showMenu() {
+ setMenuPosition(getView().getClientX(), getView().getClientY());
onOverMenu.get().show();
}
Deleted: trunk/src/main/java/cc/kune/events/client/viewer/EventAddMenuItem.java
===================================================================
--- trunk/src/main/java/cc/kune/events/client/viewer/EventAddMenuItem.java 2011-12-21 17:45:17 UTC (rev 1646)
+++ trunk/src/main/java/cc/kune/events/client/viewer/EventAddMenuItem.java 2011-12-21 23:32:22 UTC (rev 1647)
@@ -1,74 +0,0 @@
-package cc.kune.events.client.viewer;
-
-import cc.kune.common.client.actions.ActionEvent;
-import cc.kune.common.client.actions.ui.descrip.MenuItemDescriptor;
-import cc.kune.common.client.notify.NotifyUser;
-import cc.kune.common.client.ui.dialogs.PromptTopDialog;
-import cc.kune.common.client.ui.dialogs.PromptTopDialog.Builder;
-import cc.kune.common.shared.i18n.I18nTranslationService;
-import cc.kune.core.client.actions.RolAction;
-import cc.kune.core.client.resources.nav.NavResources;
-import cc.kune.core.shared.dto.AccessRolDTO;
-import cc.kune.events.client.actions.CalendarOnOverMenu;
-
-import com.google.gwt.event.dom.client.ClickEvent;
-import com.google.gwt.event.dom.client.ClickHandler;
-import com.google.inject.Inject;
-import com.google.inject.Provider;
-
-public class EventAddMenuItem extends MenuItemDescriptor {
- public static class EventAddAction extends RolAction {
- private final Provider<CalendarViewer> calendar;
- private PromptTopDialog dialog;
- private final I18nTranslationService i18n;
-
- @Inject
- public EventAddAction(final NavResources res, final I18nTranslationService i18n,
- final Provider<CalendarViewer> calendar) {
- super(AccessRolDTO.Editor, true);
- this.i18n = i18n;
- this.calendar = calendar;
- withText(i18n.t("Add a appointment")).withIcon(res.calendarAdd());
- }
-
- @Override
- public void actionPerformed(final ActionEvent event) {
- if (dialog == null) {
- final Builder builder = new PromptTopDialog.Builder(CREATE_APP_ID,
- i18n.t("Description of the appointment"), true, true, i18n.getDirection());
- builder.firstButtonTitle(i18n.t("Add")).firstButtonId(CREATE_APP_ADD_ID);
- builder.sndButtonTitle(i18n.t("Cancel")).sndButtonId(CREATE_APP_CANCEL_ID);
- dialog = builder.build();
- dialog.getFirstBtn().addClickHandler(new ClickHandler() {
- @Override
- public void onClick(final ClickEvent event) {
- if (dialog.isValid()) {
- calendar.get().addAppointment(dialog.getTextFieldValue(), calendar.get().getOnOverDate());
- NotifyUser.info("Appointment added but not yet saved (this is under development)");
- dialog.hide();
- }
- }
- });
- dialog.getSecondBtn().addClickHandler(new ClickHandler() {
- @Override
- public void onClick(final ClickEvent event) {
- dialog.hide();
- }
- });
- }
- dialog.clearTextFieldValue();
- dialog.showCentered();
- dialog.focusOnTextBox();
- }
- }
-
- public static final String CREATE_APP_ADD_ID = "event-add-menu-item-add-btn";
- public static final String CREATE_APP_CANCEL_ID = "event-add-menu-item-add-btn";
- public static final String CREATE_APP_ID = "event-add-menu-item-form";
-
- @Inject
- public EventAddMenuItem(final EventAddAction action, final CalendarOnOverMenu cal) {
- super(action);
- setParent(cal.get());
- }
-}
Deleted: trunk/src/main/java/cc/kune/events/client/viewer/EventEditMenuItem.java
===================================================================
--- trunk/src/main/java/cc/kune/events/client/viewer/EventEditMenuItem.java 2011-12-21 17:45:17 UTC (rev 1646)
+++ trunk/src/main/java/cc/kune/events/client/viewer/EventEditMenuItem.java 2011-12-21 23:32:22 UTC (rev 1647)
@@ -1,48 +0,0 @@
-package cc.kune.events.client.viewer;
-
-import cc.kune.common.client.actions.ActionEvent;
-import cc.kune.common.client.actions.ui.descrip.MenuItemDescriptor;
-import cc.kune.common.client.ui.dialogs.PromptTopDialog;
-import cc.kune.common.shared.i18n.I18nTranslationService;
-import cc.kune.core.client.actions.RolAction;
-import cc.kune.core.client.resources.nav.NavResources;
-import cc.kune.core.shared.dto.AccessRolDTO;
-import cc.kune.events.client.actions.CalendarOnOverMenu;
-
-import com.google.gwt.event.shared.EventBus;
-import com.google.inject.Inject;
-import com.google.inject.Provider;
-
-public class EventEditMenuItem extends MenuItemDescriptor {
- public static class EventEditAction extends RolAction {
- private final Provider<CalendarViewer> calendar;
- private PromptTopDialog dialog;
- private final I18nTranslationService i18n;
-
- @Inject
- public EventEditAction(final NavResources res, final I18nTranslationService i18n,
- final Provider<CalendarViewer> calendar, final EventBus eventBus) {
- super(AccessRolDTO.Administrator, true);
- this.i18n = i18n;
- this.calendar = calendar;
- withText(i18n.t("Edit the appointment")).withIcon(res.calendarAdd());
- eventBus.addHandler(CalendarStateChangeEvent.getType(),
- new CalendarStateChangeEvent.CalendarStateChangeHandler() {
- @Override
- public void onCalendarStateChange(final CalendarStateChangeEvent event) {
- setEnabled(!calendar.get().getAppToEdit().equals(CalendarViewer.NO_APPOINT));
- }
- });
- }
-
- @Override
- public void actionPerformed(final ActionEvent event) {
- }
- }
-
- @Inject
- public EventEditMenuItem(final EventEditAction action, final CalendarOnOverMenu cal) {
- super(action);
- setParent(cal.get());
- }
-}
Deleted: trunk/src/main/java/cc/kune/events/client/viewer/EventRemoveMenuItem.java
===================================================================
--- trunk/src/main/java/cc/kune/events/client/viewer/EventRemoveMenuItem.java 2011-12-21 17:45:17 UTC (rev 1646)
+++ trunk/src/main/java/cc/kune/events/client/viewer/EventRemoveMenuItem.java 2011-12-21 23:32:22 UTC (rev 1647)
@@ -1,83 +0,0 @@
-package cc.kune.events.client.viewer;
-
-import cc.kune.common.client.actions.ActionEvent;
-import cc.kune.common.client.actions.ui.descrip.MenuItemDescriptor;
-import cc.kune.common.client.notify.NotifyUser;
-import cc.kune.common.client.ui.dialogs.PromptTopDialog;
-import cc.kune.common.client.ui.dialogs.PromptTopDialog.Builder;
-import cc.kune.common.shared.i18n.I18nTranslationService;
-import cc.kune.core.client.actions.RolAction;
-import cc.kune.core.client.resources.nav.NavResources;
-import cc.kune.core.shared.dto.AccessRolDTO;
-import cc.kune.events.client.actions.CalendarOnOverMenu;
-
-import com.google.gwt.event.dom.client.ClickEvent;
-import com.google.gwt.event.dom.client.ClickHandler;
-import com.google.gwt.event.shared.EventBus;
-import com.google.inject.Inject;
-import com.google.inject.Provider;
-
-public class EventRemoveMenuItem extends MenuItemDescriptor {
- public static class EventEditAction extends RolAction {
- private final Provider<CalendarViewer> calendar;
- private PromptTopDialog dialog;
- private final I18nTranslationService i18n;
-
- @Inject
- public EventEditAction(final NavResources res, final I18nTranslationService i18n,
- final Provider<CalendarViewer> calendar, final EventBus eventBus) {
- super(AccessRolDTO.Editor, true);
- this.i18n = i18n;
- this.calendar = calendar;
- withText(i18n.t("Edit the appointment")).withIcon(res.calendarAdd());
- eventBus.addHandler(CalendarStateChangeEvent.getType(),
- new CalendarStateChangeEvent.CalendarStateChangeHandler() {
-
- @Override
- public void onCalendarStateChange(final CalendarStateChangeEvent event) {
- setEnabled(!calendar.get().getAppToEdit().equals(CalendarViewer.NO_APPOINT));
- }
- });
- }
-
- @Override
- public void actionPerformed(final ActionEvent event) {
- if (dialog == null) {
- final Builder builder = new PromptTopDialog.Builder(CREATE_APP_ID,
- i18n.t("Description of the appointment"), true, true, i18n.getDirection());
- builder.firstButtonTitle(i18n.t("Add")).firstButtonId(CREATE_APP_ADD_ID);
- builder.sndButtonTitle(i18n.t("Cancel")).sndButtonId(CREATE_APP_CANCEL_ID);
- dialog = builder.build();
- dialog.getFirstBtn().addClickHandler(new ClickHandler() {
- @Override
- public void onClick(final ClickEvent event) {
- if (dialog.isValid()) {
- calendar.get().addAppointment(dialog.getTextFieldValue(), calendar.get().getOnOverDate());
- NotifyUser.info("Appointment should be edited (this is under development)");
- dialog.hide();
- }
- }
- });
- dialog.getSecondBtn().addClickHandler(new ClickHandler() {
- @Override
- public void onClick(final ClickEvent event) {
- dialog.hide();
- }
- });
- }
- dialog.clearTextFieldValue();
- dialog.showCentered();
- dialog.focusOnTextBox();
- }
- }
-
- public static final String CREATE_APP_ADD_ID = "event-add-menu-item-add-btn";
- public static final String CREATE_APP_CANCEL_ID = "event-add-menu-item-add-btn";
- public static final String CREATE_APP_ID = "event-add-menu-item-form";
-
- @Inject
- public EventRemoveMenuItem(final EventEditAction action, final CalendarOnOverMenu cal) {
- super(action);
- setParent(cal.get());
- }
-}
1
0
r1646 - in trunk/src/main/java/cc/kune: common/client/actions/ui/descrip events/client/viewer
by Vicente J. Ruiz Jurado 21 Dec '11
by Vicente J. Ruiz Jurado 21 Dec '11
21 Dec '11
Author: vjrj_
Date: 2011-12-21 18:45:17 +0100 (Wed, 21 Dec 2011)
New Revision: 1646
Modified:
trunk/src/main/java/cc/kune/common/client/actions/ui/descrip/MenuDescriptor.java
trunk/src/main/java/cc/kune/events/client/viewer/CalendarViewerPresenter.java
Log:
calendar updated
Modified: trunk/src/main/java/cc/kune/common/client/actions/ui/descrip/MenuDescriptor.java
===================================================================
--- trunk/src/main/java/cc/kune/common/client/actions/ui/descrip/MenuDescriptor.java 2011-12-21 16:48:51 UTC (rev 1645)
+++ trunk/src/main/java/cc/kune/common/client/actions/ui/descrip/MenuDescriptor.java 2011-12-21 17:45:17 UTC (rev 1646)
@@ -98,6 +98,10 @@
return (Boolean) super.getValue(MENU_STANDALONE);
}
+ public void setMenuPosition(final Position position) {
+ putValue(MENU_SHOW_NEAR_TO, position);
+ }
+
public void setRightIcon(final ImageResource icon) {
putValue(MENU_RIGHTICON, icon);
}
@@ -118,6 +122,13 @@
}
/**
+ * Show the menu (remember to set the menu position before)
+ */
+ public void show() {
+ putValue(MENU_SHOW, !((Boolean) getValue(MENU_SHOW)));
+ }
+
+ /**
* Show the menu near the Element object specified
*
* @param object
@@ -125,7 +136,7 @@
*/
public void show(final Object object) {
putValue(MENU_SHOW_NEAR_TO, object);
- putValue(MENU_SHOW, !((Boolean) getValue(MENU_SHOW)));
+ show();
}
/**
@@ -135,8 +146,8 @@
* the position to show menu near of it
*/
public void show(final Position position) {
- putValue(MENU_SHOW_NEAR_TO, position);
- putValue(MENU_SHOW, !((Boolean) getValue(MENU_SHOW)));
+ setMenuPosition(position);
+ show();
}
/**
@@ -147,6 +158,6 @@
*/
public void show(final String id) {
putValue(MENU_SHOW_NEAR_TO, id);
- putValue(MENU_SHOW, !((Boolean) getValue(MENU_SHOW)));
+ show();
}
}
Modified: trunk/src/main/java/cc/kune/events/client/viewer/CalendarViewerPresenter.java
===================================================================
--- trunk/src/main/java/cc/kune/events/client/viewer/CalendarViewerPresenter.java 2011-12-21 16:48:51 UTC (rev 1645)
+++ trunk/src/main/java/cc/kune/events/client/viewer/CalendarViewerPresenter.java 2011-12-21 17:45:17 UTC (rev 1646)
@@ -6,6 +6,7 @@
import cc.kune.common.client.actions.ui.descrip.Position;
import cc.kune.common.client.notify.NotifyUser;
+import cc.kune.common.client.tooltip.Tooltip;
import cc.kune.core.shared.dto.HasContent;
import cc.kune.events.client.actions.CalendarOnOverMenu;
import cc.kune.gspace.client.viewers.AbstractFolderViewerView;
@@ -37,6 +38,7 @@
import com.google.gwt.event.logical.shared.SelectionHandler;
import com.google.gwt.event.shared.EventBus;
import com.google.gwt.event.shared.HandlerRegistration;
+import com.google.gwt.user.client.ui.Widget;
import com.google.gwt.user.datepicker.client.CalendarUtil;
import com.google.inject.Inject;
import com.gwtplatform.mvp.client.Presenter;
@@ -108,19 +110,24 @@
appToEdit = NO_APPOINT;
onOverDate = event.getTarget();
updateMenuItems();
+ showMenu();
}
});
getView().addClickHandler(new ClickHandler() {
@Override
public void onClick(final ClickEvent event) {
- onOverMenu.get().show(new Position(event.getClientX(), event.getClientY()));
+ setMenuPosition(event.getClientX(), event.getClientY());
}
+
});
getView().addMouseOverHandler(new MouseOverHandler<Appointment>() {
@Override
public void onMouseOver(final MouseOverEvent<Appointment> event) {
NotifyUser.info("on mouse over");
- // Tooltip.to((Widget) event.getSource(), "kk");
+ // final Element element = (Element) event.getElement();
+ // showMenu(element.getAbsoluteLeft() + 10, element.getAbsoluteTop() +
+ // 10);
+ Tooltip.to((Widget) event.getElement(), "kk");
// final Tooltip tooltip = new Tooltip();
// tooltip.setText("lalala");
// tooltip.setPopupPosition(, currentDaysView)
@@ -146,6 +153,7 @@
onOverDate = event.getSelectedItem().getStart();
NotifyUser.info("on selection");
updateMenuItems();
+ showMenu();
// getView().removeAppointment(event.getSelectedItem());
}
});
@@ -220,6 +228,10 @@
getView().setDate(date);
}
+ private void setMenuPosition(final int x, final int y) {
+ onOverMenu.get().setMenuPosition(new Position(x, y));
+ }
+
@Override
public void setView(final CalendarViews calView) {
setViewImpl(calView);
@@ -242,6 +254,10 @@
getView().setView(calView, days);
}
+ private void showMenu() {
+ onOverMenu.get().show();
+ }
+
private void updateMenuItems() {
CalendarStateChangeEvent.fire(getEventBus());
}
1
0
r1645 - in trunk: . src/main/java/cc/kune/common/client/actions src/main/java/cc/kune/common/client/ui/dialogs src/main/java/cc/kune/common/client/utils src/main/java/cc/kune/events/client src/main/java/cc/kune/events/client/actions src/main/java/cc/kune/events/client/viewer src/main/java/cc/kune/gspace/client/actions
by Vicente J. Ruiz Jurado 21 Dec '11
by Vicente J. Ruiz Jurado 21 Dec '11
21 Dec '11
Author: vjrj_
Date: 2011-12-21 17:48:51 +0100 (Wed, 21 Dec 2011)
New Revision: 1645
Added:
trunk/src/main/java/cc/kune/events/client/actions/CalendarOnOverMenu.java
trunk/src/main/java/cc/kune/events/client/viewer/CalendarStateChangeEvent.java
trunk/src/main/java/cc/kune/events/client/viewer/EventAddMenuItem.java
trunk/src/main/java/cc/kune/events/client/viewer/EventEditMenuItem.java
trunk/src/main/java/cc/kune/events/client/viewer/EventRemoveMenuItem.java
trunk/src/main/java/cc/kune/gspace/client/actions/AbstractEditorsMenu.java
trunk/src/main/java/cc/kune/gspace/client/actions/AbstractStandaloneMenu.java
trunk/src/main/java/cc/kune/gspace/client/actions/StandaloneMenuProvider.java
Modified:
trunk/pom.xml
trunk/src/main/java/cc/kune/common/client/actions/AbstractExtendedAction.java
trunk/src/main/java/cc/kune/common/client/ui/dialogs/PromptTopDialog.java
trunk/src/main/java/cc/kune/common/client/utils/WindowUtils.java
trunk/src/main/java/cc/kune/events/client/EventsGinModule.java
trunk/src/main/java/cc/kune/events/client/actions/EventsClientActions.java
trunk/src/main/java/cc/kune/events/client/viewer/CalendarViewer.java
trunk/src/main/java/cc/kune/events/client/viewer/CalendarViewerPanel.java
trunk/src/main/java/cc/kune/events/client/viewer/CalendarViewerPresenter.java
trunk/src/main/java/cc/kune/gspace/client/actions/AbstractNewMenu.java
Log:
Calendar tool updated
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2011-12-21 09:41:22 UTC (rev 1644)
+++ trunk/pom.xml 2011-12-21 16:48:51 UTC (rev 1645)
@@ -917,26 +917,29 @@
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
+ <descriptors>
+ <descriptor>src/main/resources/assembly.xml</descriptor>
+ </descriptors>
<archive>
<manifest>
<mainClass>cc.kune.wave.server.WaveMain</mainClass>
</manifest>
</archive>
- <descriptorRefs>
- <descriptorRef>jar-with-dependencies</descriptorRef>
- </descriptorRefs>
+<!-- <descriptorRefs> -->
+<!-- <descriptorRef>jar-with-dependencies</descriptorRef> -->
+<!-- </descriptorRefs> -->
<dependencySets>
<dependencySet>
<outputDirectory>/</outputDirectory>
<scope>runtime</scope>
<unpackOptions>
- <excludes>
- <!-- FIXME this is needed? -->
- <exclude>**/gxt/**</exclude>
- <exclude>**/extjs/**</exclude>
- <exclude>**extjs**</exclude>
- <exclude>**gxt**</exclude>
- </excludes>
+<!-- <excludes> -->
+<!-- FIXME this is needed? -->
+<!-- <exclude>**/gxt/**</exclude> -->
+<!-- <exclude>**/extjs/**</exclude> -->
+<!-- <exclude>**extjs**</exclude> -->
+<!-- <exclude>**gxt**</exclude> -->
+<!-- </excludes> -->
<includes>
<include>${basedir}/target/kune-0.1.0-SNAPSHOT/ws/**</include>
<include>${basedir}/src/main/webapp/**</include>
Modified: trunk/src/main/java/cc/kune/common/client/actions/AbstractExtendedAction.java
===================================================================
--- trunk/src/main/java/cc/kune/common/client/actions/AbstractExtendedAction.java 2011-12-21 09:41:22 UTC (rev 1644)
+++ trunk/src/main/java/cc/kune/common/client/actions/AbstractExtendedAction.java 2011-12-21 16:48:51 UTC (rev 1645)
@@ -22,45 +22,45 @@
import com.google.gwt.resources.client.ImageResource;
public abstract class AbstractExtendedAction extends AbstractAction {
- public static final String NO_ICON = null;
- public static final String NO_TEXT = null;
+ public static final String NO_ICON = null;
+ public static final String NO_TEXT = null;
- public AbstractExtendedAction() {
- super();
- }
+ public AbstractExtendedAction() {
+ super();
+ }
- public AbstractExtendedAction(final String text) {
- this(text, null, null);
- }
+ public AbstractExtendedAction(final String text) {
+ this(text, null, null);
+ }
- public AbstractExtendedAction(final String text, final String iconCls) {
- this(text, null, iconCls);
- }
+ public AbstractExtendedAction(final String text, final String iconCls) {
+ this(text, null, iconCls);
+ }
- public AbstractExtendedAction(final String text, final String tooltip, final String iconCls) {
- super();
- super.putValue(Action.NAME, text);
- super.putValue(Action.TOOLTIP, tooltip);
- super.putValue(Action.SMALL_ICON, iconCls);
- }
+ public AbstractExtendedAction(final String text, final String tooltip, final String iconCls) {
+ super();
+ super.putValue(Action.NAME, text);
+ super.putValue(Action.TOOLTIP, tooltip);
+ super.putValue(Action.SMALL_ICON, iconCls);
+ }
- public AbstractExtendedAction withIcon(final ImageResource icon) {
- super.putValue(Action.TOOLTIP, icon);
- return this;
- }
+ public AbstractExtendedAction withIcon(final ImageResource icon) {
+ super.putValue(Action.SMALL_ICON, icon);
+ return this;
+ }
- public AbstractExtendedAction withIconCls(final String icon) {
- super.putValue(Action.TOOLTIP, icon);
- return this;
- }
+ public AbstractExtendedAction withIconCls(final String icon) {
+ super.putValue(Action.TOOLTIP, icon);
+ return this;
+ }
- public AbstractExtendedAction withText(final String text) {
- super.putValue(Action.NAME, text);
- return this;
- }
+ public AbstractExtendedAction withText(final String text) {
+ super.putValue(Action.NAME, text);
+ return this;
+ }
- public AbstractExtendedAction withToolTip(final String tooltip) {
- super.putValue(Action.TOOLTIP, tooltip);
- return this;
- }
+ public AbstractExtendedAction withToolTip(final String tooltip) {
+ super.putValue(Action.TOOLTIP, tooltip);
+ return this;
+ }
}
\ No newline at end of file
Modified: trunk/src/main/java/cc/kune/common/client/ui/dialogs/PromptTopDialog.java
===================================================================
--- trunk/src/main/java/cc/kune/common/client/ui/dialogs/PromptTopDialog.java 2011-12-21 09:41:22 UTC (rev 1644)
+++ trunk/src/main/java/cc/kune/common/client/ui/dialogs/PromptTopDialog.java 2011-12-21 16:48:51 UTC (rev 1645)
@@ -125,6 +125,10 @@
super.getInnerPanel().add(textField);
}
+ public void clearTextFieldValue() {
+ textField.reset();
+ }
+
public void focusOnTextBox() {
textField.focus();
}
Modified: trunk/src/main/java/cc/kune/common/client/utils/WindowUtils.java
===================================================================
--- trunk/src/main/java/cc/kune/common/client/utils/WindowUtils.java 2011-12-21 09:41:22 UTC (rev 1644)
+++ trunk/src/main/java/cc/kune/common/client/utils/WindowUtils.java 2011-12-21 16:48:51 UTC (rev 1645)
@@ -15,51 +15,52 @@
*/
package cc.kune.common.client.utils;
+
public class WindowUtils {
- public static Location getLocation() {
- Location result = new Location();
- result.setHash(getHash());
- result.setHost(getHost());
- result.setHostName(getHostName());
- result.setHref(getHref());
- result.setPath(getPath());
- result.setPort(getPort());
- result.setProtocol(getProtocol());
- result.setQueryString(getQueryString());
- return result;
- }
+ private static native String getHash() /*-{
+ return $wnd.location.hash;
+ }-*/;
- private static native String getHash() /*-{
- return $wnd.location.hash;
- }-*/;
+ private static native String getHost() /*-{
+ return $wnd.location.host;
+ }-*/;
- private static native String getHost() /*-{
- return $wnd.location.host;
- }-*/;
+ private static native String getHostName() /*-{
+ return $wnd.location.hostname;
+ }-*/;
- private static native String getHostName() /*-{
- return $wnd.location.hostname;
- }-*/;
+ private static native String getHref() /*-{
+ return $wnd.location.href;
+ }-*/;
- private static native String getHref() /*-{
- return $wnd.location.href;
- }-*/;
+ public static Location getLocation() {
+ final Location result = new Location();
+ result.setHash(getHash());
+ result.setHost(getHost());
+ result.setHostName(getHostName());
+ result.setHref(getHref());
+ result.setPath(getPath());
+ result.setPort(getPort());
+ result.setProtocol(getProtocol());
+ result.setQueryString(getQueryString());
+ return result;
+ }
- private static native String getPath() /*-{
- return $wnd.location.pathname;
- }-*/;
+ private static native String getPath() /*-{
+ return $wnd.location.pathname;
+ }-*/;
- private static native String getPort() /*-{
- return $wnd.location.port;
- }-*/;
+ private static native String getPort() /*-{
+ return $wnd.location.port;
+ }-*/;
- private static native String getProtocol() /*-{
- return $wnd.location.protocol;
- }-*/;
+ private static native String getProtocol() /*-{
+ return $wnd.location.protocol;
+ }-*/;
- private static native String getQueryString() /*-{
- return $wnd.location.search;
- }-*/;
+ private static native String getQueryString() /*-{
+ return $wnd.location.search;
+ }-*/;
}
\ No newline at end of file
Modified: trunk/src/main/java/cc/kune/events/client/EventsGinModule.java
===================================================================
--- trunk/src/main/java/cc/kune/events/client/EventsGinModule.java 2011-12-21 09:41:22 UTC (rev 1644)
+++ trunk/src/main/java/cc/kune/events/client/EventsGinModule.java 2011-12-21 16:48:51 UTC (rev 1645)
@@ -27,6 +27,7 @@
import cc.kune.events.client.actions.CalendarGoPrevBtn;
import cc.kune.events.client.actions.CalendarGoTodayBtn;
import cc.kune.events.client.actions.CalendarMonthViewSelectBtn;
+import cc.kune.events.client.actions.CalendarOnOverMenu;
import cc.kune.events.client.actions.EventsClientActions;
import cc.kune.events.client.viewer.CalendarViewer;
import cc.kune.events.client.viewer.CalendarViewerPanel;
@@ -47,6 +48,7 @@
s(CalendarGoPrevBtn.class);
s(CalendarGoNextBtn.class);
s(CalendarGoTodayBtn.class);
+ s(CalendarOnOverMenu.class);
bindPresenter(CalendarViewerPresenter.class, CalendarViewerPresenter.CalendarViewerView.class,
CalendarViewerPanel.class, CalendarViewerPresenter.CalendarViewerProxy.class);
bind(CalendarViewer.class).to(CalendarViewerPresenter.class).in(Singleton.class);
Added: trunk/src/main/java/cc/kune/events/client/actions/CalendarOnOverMenu.java
===================================================================
--- trunk/src/main/java/cc/kune/events/client/actions/CalendarOnOverMenu.java (rev 0)
+++ trunk/src/main/java/cc/kune/events/client/actions/CalendarOnOverMenu.java 2011-12-21 16:48:51 UTC (rev 1645)
@@ -0,0 +1,14 @@
+package cc.kune.events.client.actions;
+
+import cc.kune.gspace.client.actions.AbstractStandaloneMenu;
+import cc.kune.gspace.client.actions.StandaloneMenuProvider;
+
+import com.google.inject.Inject;
+
+public class CalendarOnOverMenu extends StandaloneMenuProvider {
+
+ @Inject
+ public CalendarOnOverMenu(final AbstractStandaloneMenu menu) {
+ super(menu);
+ }
+}
Modified: trunk/src/main/java/cc/kune/events/client/actions/EventsClientActions.java
===================================================================
--- trunk/src/main/java/cc/kune/events/client/actions/EventsClientActions.java 2011-12-21 09:41:22 UTC (rev 1644)
+++ trunk/src/main/java/cc/kune/events/client/actions/EventsClientActions.java 2011-12-21 16:48:51 UTC (rev 1645)
@@ -26,6 +26,8 @@
import cc.kune.core.client.resources.CoreResources;
import cc.kune.core.client.state.Session;
import cc.kune.core.client.state.StateManager;
+import cc.kune.events.client.viewer.EventAddMenuItem;
+import cc.kune.events.client.viewer.EventEditMenuItem;
import cc.kune.gspace.client.actions.AbstractFoldableToolActions;
import cc.kune.gspace.client.actions.ActionGroups;
import cc.kune.gspace.client.actions.ContentViewerOptionsMenu;
@@ -53,7 +55,9 @@
final Provider<Calendar3DaysViewSelectBtn> cal3DaysBtn,
final Provider<Calendar7DaysViewSelectBtn> cal7DaysBtn,
final Provider<CalendarMonthViewSelectBtn> calMonthBtn,
- final Provider<CalendarGoPrevBtn> calPrevBtn, final Provider<CalendarGoNextBtn> calNextBtn,
+ final Provider<EventAddMenuItem> eventAddMenuItem,
+ final Provider<EventEditMenuItem> eventEditMenuItem, final Provider<CalendarGoPrevBtn> calPrevBtn,
+ final Provider<CalendarGoNextBtn> calNextBtn, final CalendarOnOverMenu onOverMenu,
final Provider<CalendarGoTodayBtn> goToday, final Provider<RefreshContentMenuItem> refresh) {
super(session, stateManager, i18n, registry);
actionsRegistry.addAction(ActionGroups.TOOLBAR, optionsMenuContent, all);
@@ -66,6 +70,11 @@
actionsRegistry.addAction(ActionGroups.TOOLBAR, calMonthBtn, containers);
actionsRegistry.addAction(ActionGroups.TOOLBAR, calNextBtn, containers);
+ // On over calendar menu
+ actionsRegistry.addAction(ActionGroups.TOOLBAR, onOverMenu, containers);
+ eventAddMenuItem.get();
+ eventEditMenuItem.get();
+
// For now, commented:
// actionsRegistry.addAction(ActionGroups.TOOLBAR, newMeetingsBtn,
// containers);
Added: trunk/src/main/java/cc/kune/events/client/viewer/CalendarStateChangeEvent.java
===================================================================
--- trunk/src/main/java/cc/kune/events/client/viewer/CalendarStateChangeEvent.java (rev 0)
+++ trunk/src/main/java/cc/kune/events/client/viewer/CalendarStateChangeEvent.java 2011-12-21 16:48:51 UTC (rev 1645)
@@ -0,0 +1,56 @@
+package cc.kune.events.client.viewer;
+
+import com.google.gwt.event.shared.EventHandler;
+import com.google.gwt.event.shared.GwtEvent;
+import com.google.gwt.event.shared.HandlerRegistration;
+import com.google.gwt.event.shared.HasHandlers;
+
+public class CalendarStateChangeEvent extends
+ GwtEvent<CalendarStateChangeEvent.CalendarStateChangeHandler> {
+
+ public interface CalendarStateChangeHandler extends EventHandler {
+ public void onCalendarStateChange(CalendarStateChangeEvent event);
+ }
+
+ public interface HasCalendarStateChangeHandlers extends HasHandlers {
+ HandlerRegistration addCalendarStateChangeHandler(CalendarStateChangeHandler handler);
+ }
+
+ private static final Type<CalendarStateChangeHandler> TYPE = new Type<CalendarStateChangeHandler>();
+
+ public static void fire(final HasHandlers source) {
+ source.fireEvent(new CalendarStateChangeEvent());
+ }
+
+ public static Type<CalendarStateChangeHandler> getType() {
+ return TYPE;
+ }
+
+ public CalendarStateChangeEvent() {
+ }
+
+ @Override
+ protected void dispatch(final CalendarStateChangeHandler handler) {
+ handler.onCalendarStateChange(this);
+ }
+
+ @Override
+ public boolean equals(final Object obj) {
+ return super.equals(obj);
+ }
+
+ @Override
+ public Type<CalendarStateChangeHandler> getAssociatedType() {
+ return TYPE;
+ }
+
+ @Override
+ public int hashCode() {
+ return super.hashCode();
+ }
+
+ @Override
+ public String toString() {
+ return "CalendarStateChangeEvent[" + "]";
+ }
+}
Modified: trunk/src/main/java/cc/kune/events/client/viewer/CalendarViewer.java
===================================================================
--- trunk/src/main/java/cc/kune/events/client/viewer/CalendarViewer.java 2011-12-21 09:41:22 UTC (rev 1644)
+++ trunk/src/main/java/cc/kune/events/client/viewer/CalendarViewer.java 2011-12-21 16:48:51 UTC (rev 1645)
@@ -4,13 +4,30 @@
import cc.kune.gspace.client.tool.ContentViewer;
+import com.bradrydzewski.gwt.calendar.client.Appointment;
import com.bradrydzewski.gwt.calendar.client.CalendarViews;
public interface CalendarViewer extends ContentViewer {
+ public static final Appointment NO_APPOINT = new Appointment();
+
+ void addAppointment(String description, Date onDate);
+
void decrement();
+ /**
+ * Gets the current Appointment that can be edit.
+ *
+ * @return the appointment to edit
+ */
+ Appointment getAppToEdit();
+
Date getDate();
+ /**
+ * @return if you click on the calendar, this get the date you clicked
+ */
+ Date getOnOverDate();
+
void goToday();
void increment();
Modified: trunk/src/main/java/cc/kune/events/client/viewer/CalendarViewerPanel.java
===================================================================
--- trunk/src/main/java/cc/kune/events/client/viewer/CalendarViewerPanel.java 2011-12-21 09:41:22 UTC (rev 1644)
+++ trunk/src/main/java/cc/kune/events/client/viewer/CalendarViewerPanel.java 2011-12-21 16:48:51 UTC (rev 1645)
@@ -24,12 +24,14 @@
import com.bradrydzewski.gwt.calendar.client.event.MouseOverHandler;
import com.bradrydzewski.gwt.calendar.client.event.TimeBlockClickHandler;
import com.bradrydzewski.gwt.calendar.client.event.UpdateHandler;
+import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.DoubleClickHandler;
import com.google.gwt.event.logical.shared.OpenHandler;
import com.google.gwt.event.logical.shared.SelectionHandler;
import com.google.gwt.event.shared.GwtEvent;
import com.google.gwt.event.shared.HandlerRegistration;
+import com.google.gwt.user.client.Event;
import com.google.inject.Inject;
import com.google.inject.Provider;
@@ -47,6 +49,9 @@
// calendar.setWidth("auto");
// calendar.setHeight("auto");
widget = calendar;
+ calendar.sinkEvents(Event.ONMOUSEDOWN | Event.ONDBLCLICK | Event.KEYEVENTS | Event.ONMOUSEOVER
+ | Event.ONCLICK);
+
}
@Override
@@ -72,6 +77,11 @@
}
@Override
+ public HandlerRegistration addClickHandler(final ClickHandler clickHandler) {
+ return calendar.addHandler(clickHandler, ClickEvent.getType());
+ }
+
+ @Override
public HandlerRegistration addCreateHandler(final CreateHandler<Appointment> handler) {
return calendar.addCreateHandler(handler);
}
Modified: trunk/src/main/java/cc/kune/events/client/viewer/CalendarViewerPresenter.java
===================================================================
--- trunk/src/main/java/cc/kune/events/client/viewer/CalendarViewerPresenter.java 2011-12-21 09:41:22 UTC (rev 1644)
+++ trunk/src/main/java/cc/kune/events/client/viewer/CalendarViewerPresenter.java 2011-12-21 16:48:51 UTC (rev 1645)
@@ -4,11 +4,10 @@
import javax.annotation.Nonnull;
+import cc.kune.common.client.actions.ui.descrip.Position;
import cc.kune.common.client.notify.NotifyUser;
-import cc.kune.common.client.tooltip.Tooltip;
-import cc.kune.common.client.utils.SimpleResponseCallback;
-import cc.kune.common.shared.i18n.I18nTranslationService;
import cc.kune.core.shared.dto.HasContent;
+import cc.kune.events.client.actions.CalendarOnOverMenu;
import cc.kune.gspace.client.viewers.AbstractFolderViewerView;
import cc.kune.gspace.client.viewers.FolderViewerUtils;
@@ -28,6 +27,8 @@
import com.bradrydzewski.gwt.calendar.client.event.TimeBlockClickHandler;
import com.bradrydzewski.gwt.calendar.client.event.UpdateEvent;
import com.bradrydzewski.gwt.calendar.client.event.UpdateHandler;
+import com.google.gwt.event.dom.client.ClickEvent;
+import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.logical.shared.HasOpenHandlers;
import com.google.gwt.event.logical.shared.HasSelectionHandlers;
import com.google.gwt.event.logical.shared.OpenEvent;
@@ -36,7 +37,6 @@
import com.google.gwt.event.logical.shared.SelectionHandler;
import com.google.gwt.event.shared.EventBus;
import com.google.gwt.event.shared.HandlerRegistration;
-import com.google.gwt.user.client.ui.Widget;
import com.google.gwt.user.datepicker.client.CalendarUtil;
import com.google.inject.Inject;
import com.gwtplatform.mvp.client.Presenter;
@@ -59,6 +59,8 @@
void addAppointment(String title, Date date);
+ HandlerRegistration addClickHandler(ClickHandler clickHandler);
+
HandlerRegistration addCreateHandler(CreateHandler<Appointment> handler);
Date getDate();
@@ -74,45 +76,51 @@
}
private static final CalendarViews DEF_VIEW = CalendarViews.DAY;
+ public Appointment appToEdit = NO_APPOINT;
+
private CalendarViews currentCalView;
private int currentDaysView = 7;
private final FolderViewerUtils folderViewerUtils;
- private final I18nTranslationService i18n;
+ private Date onOverDate;
+ private final CalendarOnOverMenu onOverMenu;
@Inject
public CalendarViewerPresenter(final EventBus eventBus, final CalendarViewerView view,
final CalendarViewerProxy proxy, final FolderViewerUtils folderViewerUtils,
- final I18nTranslationService i18n) {
+ final CalendarOnOverMenu onOverMenu) {
super(eventBus, view, proxy);
this.folderViewerUtils = folderViewerUtils;
- this.i18n = i18n;
+ this.onOverMenu = onOverMenu;
addListeners();
setViewImpl(DEF_VIEW, currentDaysView);
}
+ @Override
+ public void addAppointment(final String description, final Date onDate) {
+ getView().addAppointment(description, onDate);
+ }
+
private void addListeners() {
getView().addTimeBlockClickHandler(new TimeBlockClickHandler<Date>() {
@Override
public void onTimeBlockClick(final TimeBlockClickEvent<Date> event) {
- NotifyUser.askConfirmation(i18n.t("Confirm, please"), i18n.t("Add a new appointment?"),
- new SimpleResponseCallback() {
- @Override
- public void onCancel() {
- // do nothing
- }
-
- @Override
- public void onSuccess() {
- getView().addAppointment("Only a test", event.getTarget());
- NotifyUser.info("Appointment added but not yet saved (this is under development)");
- }
- });
+ NotifyUser.info("on time block");
+ appToEdit = NO_APPOINT;
+ onOverDate = event.getTarget();
+ updateMenuItems();
}
});
+ getView().addClickHandler(new ClickHandler() {
+ @Override
+ public void onClick(final ClickEvent event) {
+ onOverMenu.get().show(new Position(event.getClientX(), event.getClientY()));
+ }
+ });
getView().addMouseOverHandler(new MouseOverHandler<Appointment>() {
@Override
public void onMouseOver(final MouseOverEvent<Appointment> event) {
- Tooltip.to((Widget) event.getSource(), "kk");
+ NotifyUser.info("on mouse over");
+ // Tooltip.to((Widget) event.getSource(), "kk");
// final Tooltip tooltip = new Tooltip();
// tooltip.setText("lalala");
// tooltip.setPopupPosition(, currentDaysView)
@@ -134,7 +142,10 @@
getView().addSelectionHandler(new SelectionHandler<Appointment>() {
@Override
public void onSelection(final SelectionEvent<Appointment> event) {
+ appToEdit = event.getSelectedItem();
+ onOverDate = event.getSelectedItem().getStart();
NotifyUser.info("on selection");
+ updateMenuItems();
// getView().removeAppointment(event.getSelectedItem());
}
});
@@ -156,11 +167,21 @@
}
@Override
+ public Appointment getAppToEdit() {
+ return appToEdit;
+ }
+
+ @Override
public Date getDate() {
return getView().getDate();
}
@Override
+ public Date getOnOverDate() {
+ return onOverDate;
+ }
+
+ @Override
public void goToday() {
getView().goToday();
}
@@ -220,4 +241,8 @@
this.currentDaysView = days;
getView().setView(calView, days);
}
+
+ private void updateMenuItems() {
+ CalendarStateChangeEvent.fire(getEventBus());
+ }
}
Added: trunk/src/main/java/cc/kune/events/client/viewer/EventAddMenuItem.java
===================================================================
--- trunk/src/main/java/cc/kune/events/client/viewer/EventAddMenuItem.java (rev 0)
+++ trunk/src/main/java/cc/kune/events/client/viewer/EventAddMenuItem.java 2011-12-21 16:48:51 UTC (rev 1645)
@@ -0,0 +1,74 @@
+package cc.kune.events.client.viewer;
+
+import cc.kune.common.client.actions.ActionEvent;
+import cc.kune.common.client.actions.ui.descrip.MenuItemDescriptor;
+import cc.kune.common.client.notify.NotifyUser;
+import cc.kune.common.client.ui.dialogs.PromptTopDialog;
+import cc.kune.common.client.ui.dialogs.PromptTopDialog.Builder;
+import cc.kune.common.shared.i18n.I18nTranslationService;
+import cc.kune.core.client.actions.RolAction;
+import cc.kune.core.client.resources.nav.NavResources;
+import cc.kune.core.shared.dto.AccessRolDTO;
+import cc.kune.events.client.actions.CalendarOnOverMenu;
+
+import com.google.gwt.event.dom.client.ClickEvent;
+import com.google.gwt.event.dom.client.ClickHandler;
+import com.google.inject.Inject;
+import com.google.inject.Provider;
+
+public class EventAddMenuItem extends MenuItemDescriptor {
+ public static class EventAddAction extends RolAction {
+ private final Provider<CalendarViewer> calendar;
+ private PromptTopDialog dialog;
+ private final I18nTranslationService i18n;
+
+ @Inject
+ public EventAddAction(final NavResources res, final I18nTranslationService i18n,
+ final Provider<CalendarViewer> calendar) {
+ super(AccessRolDTO.Editor, true);
+ this.i18n = i18n;
+ this.calendar = calendar;
+ withText(i18n.t("Add a appointment")).withIcon(res.calendarAdd());
+ }
+
+ @Override
+ public void actionPerformed(final ActionEvent event) {
+ if (dialog == null) {
+ final Builder builder = new PromptTopDialog.Builder(CREATE_APP_ID,
+ i18n.t("Description of the appointment"), true, true, i18n.getDirection());
+ builder.firstButtonTitle(i18n.t("Add")).firstButtonId(CREATE_APP_ADD_ID);
+ builder.sndButtonTitle(i18n.t("Cancel")).sndButtonId(CREATE_APP_CANCEL_ID);
+ dialog = builder.build();
+ dialog.getFirstBtn().addClickHandler(new ClickHandler() {
+ @Override
+ public void onClick(final ClickEvent event) {
+ if (dialog.isValid()) {
+ calendar.get().addAppointment(dialog.getTextFieldValue(), calendar.get().getOnOverDate());
+ NotifyUser.info("Appointment added but not yet saved (this is under development)");
+ dialog.hide();
+ }
+ }
+ });
+ dialog.getSecondBtn().addClickHandler(new ClickHandler() {
+ @Override
+ public void onClick(final ClickEvent event) {
+ dialog.hide();
+ }
+ });
+ }
+ dialog.clearTextFieldValue();
+ dialog.showCentered();
+ dialog.focusOnTextBox();
+ }
+ }
+
+ public static final String CREATE_APP_ADD_ID = "event-add-menu-item-add-btn";
+ public static final String CREATE_APP_CANCEL_ID = "event-add-menu-item-add-btn";
+ public static final String CREATE_APP_ID = "event-add-menu-item-form";
+
+ @Inject
+ public EventAddMenuItem(final EventAddAction action, final CalendarOnOverMenu cal) {
+ super(action);
+ setParent(cal.get());
+ }
+}
Added: trunk/src/main/java/cc/kune/events/client/viewer/EventEditMenuItem.java
===================================================================
--- trunk/src/main/java/cc/kune/events/client/viewer/EventEditMenuItem.java (rev 0)
+++ trunk/src/main/java/cc/kune/events/client/viewer/EventEditMenuItem.java 2011-12-21 16:48:51 UTC (rev 1645)
@@ -0,0 +1,48 @@
+package cc.kune.events.client.viewer;
+
+import cc.kune.common.client.actions.ActionEvent;
+import cc.kune.common.client.actions.ui.descrip.MenuItemDescriptor;
+import cc.kune.common.client.ui.dialogs.PromptTopDialog;
+import cc.kune.common.shared.i18n.I18nTranslationService;
+import cc.kune.core.client.actions.RolAction;
+import cc.kune.core.client.resources.nav.NavResources;
+import cc.kune.core.shared.dto.AccessRolDTO;
+import cc.kune.events.client.actions.CalendarOnOverMenu;
+
+import com.google.gwt.event.shared.EventBus;
+import com.google.inject.Inject;
+import com.google.inject.Provider;
+
+public class EventEditMenuItem extends MenuItemDescriptor {
+ public static class EventEditAction extends RolAction {
+ private final Provider<CalendarViewer> calendar;
+ private PromptTopDialog dialog;
+ private final I18nTranslationService i18n;
+
+ @Inject
+ public EventEditAction(final NavResources res, final I18nTranslationService i18n,
+ final Provider<CalendarViewer> calendar, final EventBus eventBus) {
+ super(AccessRolDTO.Administrator, true);
+ this.i18n = i18n;
+ this.calendar = calendar;
+ withText(i18n.t("Edit the appointment")).withIcon(res.calendarAdd());
+ eventBus.addHandler(CalendarStateChangeEvent.getType(),
+ new CalendarStateChangeEvent.CalendarStateChangeHandler() {
+ @Override
+ public void onCalendarStateChange(final CalendarStateChangeEvent event) {
+ setEnabled(!calendar.get().getAppToEdit().equals(CalendarViewer.NO_APPOINT));
+ }
+ });
+ }
+
+ @Override
+ public void actionPerformed(final ActionEvent event) {
+ }
+ }
+
+ @Inject
+ public EventEditMenuItem(final EventEditAction action, final CalendarOnOverMenu cal) {
+ super(action);
+ setParent(cal.get());
+ }
+}
Added: trunk/src/main/java/cc/kune/events/client/viewer/EventRemoveMenuItem.java
===================================================================
--- trunk/src/main/java/cc/kune/events/client/viewer/EventRemoveMenuItem.java (rev 0)
+++ trunk/src/main/java/cc/kune/events/client/viewer/EventRemoveMenuItem.java 2011-12-21 16:48:51 UTC (rev 1645)
@@ -0,0 +1,83 @@
+package cc.kune.events.client.viewer;
+
+import cc.kune.common.client.actions.ActionEvent;
+import cc.kune.common.client.actions.ui.descrip.MenuItemDescriptor;
+import cc.kune.common.client.notify.NotifyUser;
+import cc.kune.common.client.ui.dialogs.PromptTopDialog;
+import cc.kune.common.client.ui.dialogs.PromptTopDialog.Builder;
+import cc.kune.common.shared.i18n.I18nTranslationService;
+import cc.kune.core.client.actions.RolAction;
+import cc.kune.core.client.resources.nav.NavResources;
+import cc.kune.core.shared.dto.AccessRolDTO;
+import cc.kune.events.client.actions.CalendarOnOverMenu;
+
+import com.google.gwt.event.dom.client.ClickEvent;
+import com.google.gwt.event.dom.client.ClickHandler;
+import com.google.gwt.event.shared.EventBus;
+import com.google.inject.Inject;
+import com.google.inject.Provider;
+
+public class EventRemoveMenuItem extends MenuItemDescriptor {
+ public static class EventEditAction extends RolAction {
+ private final Provider<CalendarViewer> calendar;
+ private PromptTopDialog dialog;
+ private final I18nTranslationService i18n;
+
+ @Inject
+ public EventEditAction(final NavResources res, final I18nTranslationService i18n,
+ final Provider<CalendarViewer> calendar, final EventBus eventBus) {
+ super(AccessRolDTO.Editor, true);
+ this.i18n = i18n;
+ this.calendar = calendar;
+ withText(i18n.t("Edit the appointment")).withIcon(res.calendarAdd());
+ eventBus.addHandler(CalendarStateChangeEvent.getType(),
+ new CalendarStateChangeEvent.CalendarStateChangeHandler() {
+
+ @Override
+ public void onCalendarStateChange(final CalendarStateChangeEvent event) {
+ setEnabled(!calendar.get().getAppToEdit().equals(CalendarViewer.NO_APPOINT));
+ }
+ });
+ }
+
+ @Override
+ public void actionPerformed(final ActionEvent event) {
+ if (dialog == null) {
+ final Builder builder = new PromptTopDialog.Builder(CREATE_APP_ID,
+ i18n.t("Description of the appointment"), true, true, i18n.getDirection());
+ builder.firstButtonTitle(i18n.t("Add")).firstButtonId(CREATE_APP_ADD_ID);
+ builder.sndButtonTitle(i18n.t("Cancel")).sndButtonId(CREATE_APP_CANCEL_ID);
+ dialog = builder.build();
+ dialog.getFirstBtn().addClickHandler(new ClickHandler() {
+ @Override
+ public void onClick(final ClickEvent event) {
+ if (dialog.isValid()) {
+ calendar.get().addAppointment(dialog.getTextFieldValue(), calendar.get().getOnOverDate());
+ NotifyUser.info("Appointment should be edited (this is under development)");
+ dialog.hide();
+ }
+ }
+ });
+ dialog.getSecondBtn().addClickHandler(new ClickHandler() {
+ @Override
+ public void onClick(final ClickEvent event) {
+ dialog.hide();
+ }
+ });
+ }
+ dialog.clearTextFieldValue();
+ dialog.showCentered();
+ dialog.focusOnTextBox();
+ }
+ }
+
+ public static final String CREATE_APP_ADD_ID = "event-add-menu-item-add-btn";
+ public static final String CREATE_APP_CANCEL_ID = "event-add-menu-item-add-btn";
+ public static final String CREATE_APP_ID = "event-add-menu-item-form";
+
+ @Inject
+ public EventRemoveMenuItem(final EventEditAction action, final CalendarOnOverMenu cal) {
+ super(action);
+ setParent(cal.get());
+ }
+}
Added: trunk/src/main/java/cc/kune/gspace/client/actions/AbstractEditorsMenu.java
===================================================================
--- trunk/src/main/java/cc/kune/gspace/client/actions/AbstractEditorsMenu.java (rev 0)
+++ trunk/src/main/java/cc/kune/gspace/client/actions/AbstractEditorsMenu.java 2011-12-21 16:48:51 UTC (rev 1645)
@@ -0,0 +1,39 @@
+/*
+ *
+ * Copyright (C) 2007-2011 The kune development team (see CREDITS for details)
+ * This file is part of kune.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+package cc.kune.gspace.client.actions;
+
+import cc.kune.common.client.actions.ui.descrip.MenuDescriptor;
+import cc.kune.core.client.state.AccessRightsChangedEvent;
+import cc.kune.core.client.state.AccessRightsChangedEvent.AccessRightsChangedHandler;
+import cc.kune.core.client.state.AccessRightsClientManager;
+
+public class AbstractEditorsMenu extends MenuDescriptor {
+
+ public AbstractEditorsMenu(final AccessRightsClientManager rightsManager) {
+ super();
+ this.withStyles("k-button, k-btn, k-5corners, k-def-docbtn, k-fl");
+ rightsManager.onRightsChanged(true, new AccessRightsChangedHandler() {
+ @Override
+ public void onAccessRightsChanged(final AccessRightsChangedEvent event) {
+ AbstractEditorsMenu.this.setVisible(event.getCurrentRights().isEditable());
+ }
+ });
+ }
+}
Modified: trunk/src/main/java/cc/kune/gspace/client/actions/AbstractNewMenu.java
===================================================================
--- trunk/src/main/java/cc/kune/gspace/client/actions/AbstractNewMenu.java 2011-12-21 09:41:22 UTC (rev 1644)
+++ trunk/src/main/java/cc/kune/gspace/client/actions/AbstractNewMenu.java 2011-12-21 16:48:51 UTC (rev 1645)
@@ -19,29 +19,18 @@
*/
package cc.kune.gspace.client.actions;
-import cc.kune.common.client.actions.ui.descrip.MenuDescriptor;
import cc.kune.common.shared.i18n.I18nTranslationService;
import cc.kune.core.client.resources.CoreResources;
-import cc.kune.core.client.state.AccessRightsChangedEvent;
-import cc.kune.core.client.state.AccessRightsChangedEvent.AccessRightsChangedHandler;
import cc.kune.core.client.state.AccessRightsClientManager;
import com.google.inject.Inject;
-public class AbstractNewMenu extends MenuDescriptor {
+public class AbstractNewMenu extends AbstractEditorsMenu {
@Inject
public AbstractNewMenu(final CoreResources res, final I18nTranslationService i18n,
final AccessRightsClientManager rightsManager) {
- super();
- this.withIcon(res.addGreen()).withStyles("k-button, k-btn, k-5corners, k-def-docbtn, k-fl").withText(
- i18n.t("More"));
-
- rightsManager.onRightsChanged(true, new AccessRightsChangedHandler() {
- @Override
- public void onAccessRightsChanged(final AccessRightsChangedEvent event) {
- AbstractNewMenu.this.setVisible(event.getCurrentRights().isEditable());
- }
- });
+ super(rightsManager);
+ withText(i18n.t("More")).withIcon(res.addGreen());
}
}
Added: trunk/src/main/java/cc/kune/gspace/client/actions/AbstractStandaloneMenu.java
===================================================================
--- trunk/src/main/java/cc/kune/gspace/client/actions/AbstractStandaloneMenu.java (rev 0)
+++ trunk/src/main/java/cc/kune/gspace/client/actions/AbstractStandaloneMenu.java 2011-12-21 16:48:51 UTC (rev 1645)
@@ -0,0 +1,33 @@
+/*
+ *
+ * Copyright (C) 2007-2011 The kune development team (see CREDITS for details)
+ * This file is part of kune.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+package cc.kune.gspace.client.actions;
+
+import cc.kune.core.client.state.AccessRightsClientManager;
+
+import com.google.inject.Inject;
+
+public class AbstractStandaloneMenu extends AbstractEditorsMenu {
+
+ @Inject
+ public AbstractStandaloneMenu(final AccessRightsClientManager rightsManager) {
+ super(rightsManager);
+ setStandalone(true);
+ }
+}
Added: trunk/src/main/java/cc/kune/gspace/client/actions/StandaloneMenuProvider.java
===================================================================
--- trunk/src/main/java/cc/kune/gspace/client/actions/StandaloneMenuProvider.java (rev 0)
+++ trunk/src/main/java/cc/kune/gspace/client/actions/StandaloneMenuProvider.java 2011-12-21 16:48:51 UTC (rev 1645)
@@ -0,0 +1,45 @@
+/*
+ *
+ * Copyright (C) 2007-2011 The kune development team (see CREDITS for details)
+ * This file is part of kune.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+package cc.kune.gspace.client.actions;
+
+import cc.kune.common.client.actions.ui.descrip.MenuDescriptor;
+
+import com.google.inject.Provider;
+
+/**
+ * The Class StandAloneMenuProvider is a way to create a kind of singletons for
+ * menu entries. This can be register in a list of Providers<GuiDescriptor> but
+ * in fact only references one item and can be used to select the parent of some
+ * menu items
+ */
+public abstract class StandaloneMenuProvider implements Provider<MenuDescriptor> {
+
+ private final AbstractStandaloneMenu menu;
+
+ public StandaloneMenuProvider(final AbstractStandaloneMenu menu) {
+ this.menu = menu;
+ }
+
+ @Override
+ public MenuDescriptor get() {
+ return menu;
+ }
+
+}
1
0
21 Dec '11
Author: vjrj_
Date: 2011-12-21 10:41:22 +0100 (Wed, 21 Dec 2011)
New Revision: 1644
Modified:
trunk/src/main/java/cc/kune/gspace/client/i18n/AbstractLanguageSelectorPanel.java
trunk/src/main/java/cc/kune/gspace/client/i18n/I18nCellList.java
trunk/src/main/java/cc/kune/gspace/client/i18n/I18nTranslationDataProvider.java
trunk/src/main/java/cc/kune/gspace/client/i18n/I18nTranslatorForm.java
trunk/src/main/java/cc/kune/gspace/client/i18n/I18nTranslatorForm.ui.xml
trunk/src/main/java/cc/kune/gspace/client/i18n/I18nTranslatorPanel.java
Log:
Some usability fixes in translator
Modified: trunk/src/main/java/cc/kune/gspace/client/i18n/AbstractLanguageSelectorPanel.java
===================================================================
--- trunk/src/main/java/cc/kune/gspace/client/i18n/AbstractLanguageSelectorPanel.java 2011-12-21 09:02:04 UTC (rev 1643)
+++ trunk/src/main/java/cc/kune/gspace/client/i18n/AbstractLanguageSelectorPanel.java 2011-12-21 09:41:22 UTC (rev 1644)
@@ -112,6 +112,7 @@
private void createLangCombo(final boolean withEnglish) {
// Field.setMsgTarget("side");
+ // NOTE: The Combo box in modal popups fails!
langCombo = new ComboBox<LanguageData>();
langCombo.setName(LANG_FIELD);
langCombo.setMinChars(1);
Modified: trunk/src/main/java/cc/kune/gspace/client/i18n/I18nCellList.java
===================================================================
--- trunk/src/main/java/cc/kune/gspace/client/i18n/I18nCellList.java 2011-12-21 09:02:04 UTC (rev 1643)
+++ trunk/src/main/java/cc/kune/gspace/client/i18n/I18nCellList.java 2011-12-21 09:41:22 UTC (rev 1644)
@@ -17,6 +17,7 @@
*/
package cc.kune.gspace.client.i18n;
+import cc.kune.common.client.notify.NotifyUser;
import cc.kune.common.client.utils.SimpleCallback;
import cc.kune.core.client.i18n.I18nUITranslationService;
import cc.kune.core.shared.dto.I18nLanguageSimpleDTO;
@@ -174,6 +175,7 @@
@Override
public void onCallback() {
translatorForm.focusToTranslate();
+ NotifyUser.hideProgress();
}
});
Modified: trunk/src/main/java/cc/kune/gspace/client/i18n/I18nTranslationDataProvider.java
===================================================================
--- trunk/src/main/java/cc/kune/gspace/client/i18n/I18nTranslationDataProvider.java 2011-12-21 09:02:04 UTC (rev 1643)
+++ trunk/src/main/java/cc/kune/gspace/client/i18n/I18nTranslationDataProvider.java 2011-12-21 09:41:22 UTC (rev 1644)
@@ -17,6 +17,7 @@
import java.util.List;
+import cc.kune.common.client.notify.NotifyUser;
import cc.kune.common.client.utils.SimpleCallback;
import cc.kune.core.client.rpcservices.AsyncCallbackSimple;
import cc.kune.core.client.rpcservices.I18nServiceAsync;
@@ -70,6 +71,7 @@
}
public void setLanguage(final I18nLanguageSimpleDTO language, final boolean toTranslate) {
+ NotifyUser.showProgressLoading();
dataProvider.getList().clear();
dataProvider.refresh();
i18n.getTranslatedLexicon(session.getUserHash(), language.getCode(), toTranslate,
Modified: trunk/src/main/java/cc/kune/gspace/client/i18n/I18nTranslatorForm.java
===================================================================
--- trunk/src/main/java/cc/kune/gspace/client/i18n/I18nTranslatorForm.java 2011-12-21 09:02:04 UTC (rev 1643)
+++ trunk/src/main/java/cc/kune/gspace/client/i18n/I18nTranslatorForm.java 2011-12-21 09:41:22 UTC (rev 1644)
@@ -37,7 +37,7 @@
import com.google.gwt.user.client.ui.Widget;
/**
- * A form used for editing contacts.
+ * A form used for editing translations.
*/
public class I18nTranslatorForm extends Composite {
@@ -167,7 +167,6 @@
toTranslate.setText("");
translation.setText("");
noteForTranslators.setVisible(false);
-
}
private void updateWithTimer() {
Modified: trunk/src/main/java/cc/kune/gspace/client/i18n/I18nTranslatorForm.ui.xml
===================================================================
--- trunk/src/main/java/cc/kune/gspace/client/i18n/I18nTranslatorForm.ui.xml 2011-12-21 09:02:04 UTC (rev 1643)
+++ trunk/src/main/java/cc/kune/gspace/client/i18n/I18nTranslatorForm.ui.xml 2011-12-21 09:41:22 UTC (rev 1644)
@@ -39,8 +39,8 @@
padding: 5px;
}
- .textarea {
- resize: both;
+ textarea.input {
+ resize: both !important;
}
.tip {
@@ -78,7 +78,7 @@
</g:FlowPanel>
<g:FlowPanel addStyleNames="{style.row}">
<g:Label ui:field="toLanguageTitle" addStyleNames="{style.titles} {style.cell}"/>
- <g:TextArea ui:field='translation' addStyleNames="{style.cell}{style.textarea}"
+ <g:TextArea ui:field='translation' addStyleNames="{style.cell} {style.input}"
visibleLines="5"/>
<g:FlowPanel styleName="k-button"
addStyleNames="{style.cell} {style.copyicon} k-button k-btn k-5corners">
Modified: trunk/src/main/java/cc/kune/gspace/client/i18n/I18nTranslatorPanel.java
===================================================================
--- trunk/src/main/java/cc/kune/gspace/client/i18n/I18nTranslatorPanel.java 2011-12-21 09:02:04 UTC (rev 1643)
+++ trunk/src/main/java/cc/kune/gspace/client/i18n/I18nTranslatorPanel.java 2011-12-21 09:41:22 UTC (rev 1644)
@@ -47,7 +47,8 @@
final LanguageSelectorWithoutEnglishPanel lanSelectorPanel,
final I18nToTranslateGridPanel toTranslateGrid, final I18nTranslatedGridPanel translatedGrid,
final I18nTranslateRecomendPanel transRecommend, final CoreResources res) {
- super(TRANSLATOR_PANEL_ID, "", true, false, images, TRANSLATOR_ERROR_ID, i18n.t("Close"), null,
+ // Warning: Modal = true == you cannot select languages with mouse
+ super(TRANSLATOR_PANEL_ID, "", false, false, images, TRANSLATOR_ERROR_ID, i18n.t("Close"), null,
null, null, transGroup, i18n.getDirection());
setIcon(res.language());
this.lanSelectorPanel = lanSelectorPanel;
1
0
r1643 - in trunk/src: main/java/cc/kune/core/server/utils main/resources test/java/cc/kune/core/server test/java/cc/kune/core/server/utils
by Vicente J. Ruiz Jurado 21 Dec '11
by Vicente J. Ruiz Jurado 21 Dec '11
21 Dec '11
Author: vjrj_
Date: 2011-12-21 10:02:04 +0100 (Wed, 21 Dec 2011)
New Revision: 1643
Added:
trunk/src/main/resources/assembly.xml
trunk/src/test/java/cc/kune/core/server/utils/
trunk/src/test/java/cc/kune/core/server/utils/FilenameUtilsTest.java
Modified:
trunk/src/main/java/cc/kune/core/server/utils/FilenameUtils.java
Log:
CLOSED - # 78: Rename don't fails with a name with only a space
http://kune.ourproject.org/issues/ticket/78
Modified: trunk/src/main/java/cc/kune/core/server/utils/FilenameUtils.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/utils/FilenameUtils.java 2011-12-20 17:27:01 UTC (rev 1642)
+++ trunk/src/main/java/cc/kune/core/server/utils/FilenameUtils.java 2011-12-21 09:02:04 UTC (rev 1643)
@@ -21,22 +21,31 @@
import org.apache.commons.lang.StringUtils;
+import cc.kune.common.client.utils.TextUtils;
import cc.kune.core.client.errors.NameNotPermittedException;
public class FilenameUtils {
- /**
- * Check filename is not empty, or '.', or '..'
- *
- * @param filename
- */
- public static void checkBasicFilename(final String filename) {
- if (filename == null || filename.length() == 0 || filename.equals(".") || filename.equals("..")) {
- throw new NameNotPermittedException();
- }
+ /**
+ * Check filename is not empty, or '.', or '..'
+ *
+ * @param filename
+ */
+ public static void checkBasicFilename(final String filename) {
+ if (TextUtils.empty(StringUtils.trimToEmpty(filename)) || filename.equals(".")
+ || filename.equals("..")) {
+ throw new NameNotPermittedException();
}
+ }
- public static String chomp(final String filename) {
- return StringUtils.chomp(filename);
- }
+ /**
+ * Chomp the filename using {@link StringUtils.chomp}
+ *
+ * @param filename
+ * the filename
+ * @return the filename chomped
+ */
+ public static String chomp(final String filename) {
+ return StringUtils.chomp(filename);
+ }
}
Added: trunk/src/main/resources/assembly.xml
===================================================================
--- trunk/src/main/resources/assembly.xml (rev 0)
+++ trunk/src/main/resources/assembly.xml 2011-12-21 09:02:04 UTC (rev 1643)
@@ -0,0 +1,30 @@
+<assembly
+ xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
+ <id>complete</id>
+ <formats>
+ <format>jar</format>
+ </formats>
+ <includeBaseDirectory>false</includeBaseDirectory>
+ <dependencySets>
+ <dependencySet>
+ <outputDirectory>/</outputDirectory>
+ <useProjectArtifact>true</useProjectArtifact>
+ <unpack>true</unpack>
+ <scope>runtime</scope>
+ </dependencySet>
+ </dependencySets>
+ <fileSets>
+ <fileSet>
+ <!-- ${module.groupId}-${module.artifactId}-${module.version}.${module.extension} -->
+ <directory>target/kune-0.1.0-SNAPSHOT/ws/</directory>
+ <outputDirectory>META-INF/resources/ws</outputDirectory>
+ </fileSet>
+ <fileSet>
+ <directory>${project.basedir}/src/main/webapp/</directory>
+ <outputDirectory>META-INF/resources/webapp</outputDirectory>
+ <filtered>true</filtered>
+ </fileSet>
+ </fileSets>
+</assembly>
\ No newline at end of file
Added: trunk/src/test/java/cc/kune/core/server/utils/FilenameUtilsTest.java
===================================================================
--- trunk/src/test/java/cc/kune/core/server/utils/FilenameUtilsTest.java (rev 0)
+++ trunk/src/test/java/cc/kune/core/server/utils/FilenameUtilsTest.java 2011-12-21 09:02:04 UTC (rev 1643)
@@ -0,0 +1,38 @@
+package cc.kune.core.server.utils;
+
+import org.junit.Test;
+
+import cc.kune.core.client.errors.NameNotPermittedException;
+
+public class FilenameUtilsTest {
+
+ @Test(expected = NameNotPermittedException.class)
+ public void testNoDot() {
+ FilenameUtils.checkBasicFilename(".");
+ }
+
+ @Test(expected = NameNotPermittedException.class)
+ public void testNoDoubleDot() {
+ FilenameUtils.checkBasicFilename("..");
+ }
+
+ @Test(expected = NameNotPermittedException.class)
+ public void testNoEmpty() {
+ FilenameUtils.checkBasicFilename("");
+ }
+
+ @Test(expected = NameNotPermittedException.class)
+ public void testNoNull() {
+ FilenameUtils.checkBasicFilename(null);
+ }
+
+ @Test(expected = NameNotPermittedException.class)
+ public void testNoReturn() {
+ FilenameUtils.checkBasicFilename("\n");
+ }
+
+ @Test(expected = NameNotPermittedException.class)
+ public void testNoSpace() {
+ FilenameUtils.checkBasicFilename(" ");
+ }
+}
1
0