package org.sigmah.client.ui.presenter.zone;
/*
* #%L
* Sigmah
* %%
* Copyright (C) 2010 - 2016 URD
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this program. If not, see
* <http://www.gnu.org/licenses/gpl-3.0.html>.
* #L%
*/
import org.sigmah.client.inject.Injector;
import org.sigmah.client.page.RequestParameter;
import org.sigmah.client.ui.presenter.base.AbstractZonePresenter;
import org.sigmah.client.ui.res.ResourcesUtils;
import org.sigmah.client.ui.view.base.ViewInterface;
import org.sigmah.client.ui.view.zone.OrganizationBannerView;
import org.sigmah.client.ui.zone.Zone;
import org.sigmah.client.ui.zone.ZoneRequest;
import org.sigmah.client.util.ClientUtils;
import org.sigmah.client.util.ImageProvider;
import org.sigmah.shared.servlet.ServletConstants.Servlet;
import org.sigmah.shared.servlet.ServletConstants.ServletMethod;
import org.sigmah.shared.servlet.ServletRequestBuilder;
import com.google.gwt.http.client.Request;
import com.google.gwt.http.client.RequestBuilder;
import com.google.gwt.http.client.Response;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.HasHTML;
import com.google.gwt.user.client.ui.Panel;
import com.google.inject.ImplementedBy;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import org.sigmah.client.event.OfflineEvent;
import org.sigmah.client.event.handler.OfflineHandler;
import org.sigmah.offline.dao.LogoAsyncDAO;
import org.sigmah.offline.status.ApplicationState;
/**
* Organization banner presenter displaying organization's name and logo.
*
* @author Tom Miette (tmiette@ideia.fr)
*/
@Singleton
public class OrganizationBannerPresenter extends AbstractZonePresenter<OrganizationBannerPresenter.View> {
/**
* View interface.
*/
@ImplementedBy(OrganizationBannerView.class)
public static interface View extends ViewInterface {
Panel getLogoPanel();
Panel getNamePanel();
HasHTML getNameLabel();
}
private LogoAsyncDAO logoAsyncDAO;
private ImageProvider imageProvider;
private ApplicationState state;
/**
* Default organization name.
*/
private static final String DEFAULT_ORGANIZATION_NAME = "Sigmah";
/**
* Default organization logo URL.
* Should be a public resource file path.
*/
private static final String DEFAULT_ORGANIZATION_LOGO = ResourcesUtils.buildImageURL("header/org-default-logo.png");
@Inject
public OrganizationBannerPresenter(View view, Injector injector, LogoAsyncDAO logoAsyncDAO, ImageProvider imageProvider) {
super(view, injector);
this.logoAsyncDAO = logoAsyncDAO;
this.imageProvider = imageProvider;
}
/**
* {@inheritDoc}
*/
@Override
public Zone getZone() {
return Zone.ORG_BANNER;
}
@Override
public void onBind() {
eventBus.addHandler(OfflineEvent.getType(), new OfflineHandler() {
@Override
public void handleEvent(OfflineEvent event) {
state = event.getState();
}
});
}
/**
* {@inheritDoc}
*/
@Override
public void onZoneRequest(final ZoneRequest zoneRequest) {
// Updates name widget.
final String name = ClientUtils.isNotBlank(auth().getOrganizationName()) ? auth().getOrganizationName() : DEFAULT_ORGANIZATION_NAME;
view.getNameLabel().setHTML(name);
// Updates logo widget - requires a servlet request.
if (isAnonymous()) {
view.getLogoPanel().getElement().getStyle().setBackgroundImage(ResourcesUtils.buildCSSImageProperty(DEFAULT_ORGANIZATION_LOGO));
return;
}
if(state != ApplicationState.OFFLINE) {
imageProvider.provideDataUrl(auth().getOrganizationLogo(), new AsyncCallback<String>() {
@Override
public void onFailure(Throwable caught) {
view.getLogoPanel().getElement().getStyle().setBackgroundImage(ResourcesUtils.buildCSSImageProperty(DEFAULT_ORGANIZATION_LOGO));
}
@Override
public void onSuccess(String dataUrl) {
view.getLogoPanel().getElement().getStyle().setBackgroundImage(ResourcesUtils.buildCSSImageProperty(dataUrl));
logoAsyncDAO.saveOrUpdate(auth().getOrganizationId(), dataUrl);
}
});
} else {
logoAsyncDAO.get(auth().getOrganizationId(), new AsyncCallback<String>() {
@Override
public void onFailure(Throwable caught) {
view.getLogoPanel().getElement().getStyle().setBackgroundImage(ResourcesUtils.buildCSSImageProperty(DEFAULT_ORGANIZATION_LOGO));
}
@Override
public void onSuccess(String result) {
final String logoUrl;
if(result != null) {
logoUrl = result;
} else {
logoUrl = DEFAULT_ORGANIZATION_LOGO;
}
view.getLogoPanel().getElement().getStyle().setBackgroundImage(ResourcesUtils.buildCSSImageProperty(logoUrl));
}
});
}
}
}