Skip to content
Snippets Groups Projects
Commit 0593b859 authored by Olivier Maury's avatar Olivier Maury
Browse files

Recharger l'application pour une nouvelle version. refs #72

parent 3428cda9
No related branches found
No related tags found
1 merge request!71Resolve "Recharger l'application pour une nouvelle version"
package fr.agrometinfo.www.client;
import java.util.Date;
import org.dominokit.domino.api.shared.extension.ContextAggregator;
import org.dominokit.rest.DominoRestConfig;
import org.dominokit.rest.shared.request.RequestInterceptor;
......@@ -15,6 +17,8 @@ import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.Window;
import fr.agrometinfo.www.client.presenter.LayoutPresenter;
import fr.agrometinfo.www.client.util.ApplicationUtils;
import fr.agrometinfo.www.shared.service.ApplicationServiceFactory;
/**
* Entry point classes define <code>onModuleLoad()</code>.
......@@ -43,6 +47,20 @@ public class App implements EntryPoint {
*/
private static final EventBus EVENT_BUS = new SimpleEventBus();
private static void checkVersion() {
final Date clientDate = ApplicationUtils.getVersionDate();
if (clientDate != null) {
ApplicationServiceFactory.INSTANCE//
.getApplicationDate() //
.onSuccess(serverDate -> {
if (serverDate != null && clientDate.before(serverDate)) {
// && Window.confirm(CSTS.reloadingApplication()
ApplicationUtils.hardReload();
}
}) //
.send();
}
}
/**
* @return {@link Event}s dispatcher.
*/
......@@ -61,6 +79,8 @@ public class App implements EntryPoint {
DominoRestConfig.getInstance().addRequestInterceptor(new LocaleInterceptor());
DominoRestConfig.getInstance().setDefaultResourceRootPath(Window.Location.getPath() + "/rs");
checkVersion();
// enabling Charba
Charba.enable();
......
package fr.agrometinfo.www.client.util;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import com.google.gwt.core.client.GWT;
import com.google.gwt.i18n.client.DateTimeFormat;
import com.google.gwt.user.client.DOM;
/**
......@@ -11,11 +13,11 @@ import com.google.gwt.user.client.DOM;
*
* @author Olivier Maury
*/
public interface ApplicationUtils {
public final class ApplicationUtils {
/**
* @return root path of application.
*/
static String getApplicationUrl() {
public static String getApplicationUrl() {
final String url = GWT.getModuleBaseURL();
final String app = "/" + GWT.getModuleName() + "/";
return url.substring(0, url.length() - app.length());
......@@ -31,7 +33,7 @@ public interface ApplicationUtils {
/**
* @return available locales for the app.
*/
static Map<String, String> getAvailableLocales() {
public static Map<String, String> getAvailableLocales() {
final Map<String, String> locales = new HashMap<>();
locales.put("en", "English");
locales.put("fr", "Français");
......@@ -41,11 +43,37 @@ public interface ApplicationUtils {
/**
* @return project version
*/
static String getVersion() {
public static String getVersion() {
final String val = DOM.getElementById("application_version").getAttribute("content");
if ("VERSION".equals(val)) {
return "1.0-dev";
}
return val;
}
/**
* @return build date
*/
public static Date getVersionDate() {
final String val = DOM.getElementById("application_date").getAttribute("content");
if ("DATE".equals(val)) {
return new Date();
}
return DateTimeFormat.getFormat("yyyy-MM-dd HH:mm:ss").parse(val);
}
/**
* Reloads the current browser window, removing cache. All GWT state will be
* lost.
*/
public static native void hardReload() /*-{
$wnd.location.reload(true);
}-*/;
/**
* No Constructor.
*/
private ApplicationUtils() {
}
}
......@@ -87,7 +87,6 @@ public final class UiUtils {
return getBrowserName().toLowerCase().contains("opr");
}
/**
* No Constructor.
*/
......
package fr.agrometinfo.www.server.rs;
import java.util.Date;
import java.util.List;
import fr.agrometinfo.www.server.AgroMetInfoConfiguration;
......@@ -7,10 +8,12 @@ import fr.agrometinfo.www.server.AgroMetInfoConfiguration.ConfigurationKey;
import fr.agrometinfo.www.server.exception.AgroMetInfoException;
import fr.agrometinfo.www.server.service.MailService;
import fr.agrometinfo.www.server.service.MailService.Mail;
import fr.agrometinfo.www.server.util.AppVersion;
import fr.agrometinfo.www.server.util.ST;
import fr.agrometinfo.www.server.util.ST.Key;
import fr.agrometinfo.www.shared.dto.MessageDTO;
import fr.agrometinfo.www.shared.service.ApplicationService;
import jakarta.annotation.PostConstruct;
import jakarta.enterprise.context.RequestScoped;
import jakarta.inject.Inject;
import jakarta.ws.rs.POST;
......@@ -34,7 +37,7 @@ public class ApplicationResource implements ApplicationService {
Voici un message de <NAME> <<EMAIL>> :
<MESSAGE>
<MESSAGE>
""";
/**
......@@ -49,6 +52,24 @@ public class ApplicationResource implements ApplicationService {
@Inject
private MailService mailService;
/**
* Date of application build
*/
private Date applicationDate;
@Override
public Date getApplicationDate() {
return applicationDate;
}
/**
* Initialize fixed values.
*/
@PostConstruct
public void init() {
applicationDate = AppVersion.getBuildDate();
}
@POST
@Path(ApplicationService.PATH_SEND_EMAIL)
@Override
......
package fr.agrometinfo.www.server.util;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.ResourceBundle;
......@@ -16,6 +19,18 @@ public final class AppVersion {
private static final ResourceBundle RESOURCES = ResourceBundle.getBundle("fr.agrometinfo.www.server.version",
Locale.ROOT);
/**
* @return Date of application build
*/
public static Date getBuildDate() {
final SimpleDateFormat sdf = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss");
try {
return sdf.parse(getString("build.date"));
} catch (final ParseException e) {
return null;
}
}
/**
* @return DOI of SEASON
*/
......
package fr.agrometinfo.www.shared.service;
import java.util.Date;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
......@@ -21,15 +24,27 @@ public interface ApplicationService {
*/
String PATH = "application";
/**
* Path for {@link ApplicationService#getApplicationDate()}.
*/
String PATH_APPLICATION_DATE = "application_date";
/**
* Path for {@link ApplicationService#send()}.
*/
String PATH_SEND_EMAIL = "send";
/**
* @return date of application build
*/
@GET
@Path(PATH_APPLICATION_DATE)
Date getApplicationDate();
/**
* Send an e-mail message to AgroMetInfo team.
*
* @param message message
* @param message message
* @return nothing
*/
@POST
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment