package com.acme.samples;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.ResourceBundle;
import org.exoplatform.social.core.activity.model.ExoSocialActivity;
import org.exoplatform.social.core.activity.model.ExoSocialActivityImpl;
import org.exoplatform.social.core.application.PeopleService;
import org.exoplatform.social.core.identity.model.Identity;
import org.exoplatform.social.core.identity.provider.OrganizationIdentityProvider;
import org.exoplatform.social.core.identity.provider.SpaceIdentityProvider;
import org.exoplatform.social.core.space.model.Space;
import org.exoplatform.social.core.space.spi.SpaceService;
import org.exoplatform.social.webui.Utils;
import org.exoplatform.social.webui.activity.UIDefaultActivity;
import org.exoplatform.social.webui.composer.UIActivityComposer;
import org.exoplatform.social.webui.composer.UIComposer;
import org.exoplatform.social.webui.composer.UIComposer.PostContext;
import org.exoplatform.social.webui.profile.UIUserActivitiesDisplay;
import org.exoplatform.social.webui.profile.UIUserActivitiesDisplay.DisplayMode;
import org.exoplatform.social.webui.space.UISpaceActivitiesDisplay;
import org.exoplatform.web.application.ApplicationMessage;
import org.exoplatform.webui.application.WebuiRequestContext;
import org.exoplatform.webui.config.annotation.ComponentConfig;
import org.exoplatform.webui.config.annotation.EventConfig;
import org.exoplatform.webui.core.UIApplication;
import org.exoplatform.webui.core.UIComponent;
import org.exoplatform.webui.event.Event;
import org.exoplatform.webui.event.EventListener;
import org.exoplatform.webui.form.UIFormStringInput;
import org.exoplatform.webui.form.UIFormTextAreaInput;
@ComponentConfig(template = "war:/groovy/com/acme/samples/SampleActivityComposer.gtmpl", events = {
@EventConfig(listeners = SampleActivityComposer.CheckinActionListener.class),
@EventConfig(listeners = UIActivityComposer.CloseActionListener.class),
@EventConfig(listeners = UIActivityComposer.SubmitContentActionListener.class),
@EventConfig(listeners = UIActivityComposer.ActivateActionListener.class) })
public class SampleActivityComposer extends UIActivityComposer {
public static final String LOCATION = "location";
private String location_ = "";
private boolean isLocationValid_ = false;
private Map<String, String> templateParams;
public SampleActivityComposer() {
setReadyForPostingActivity(false);
UIFormStringInput inputLocation = new UIFormStringInput("InputLocation", "InputLocation", null);
addChild(inputLocation);
}
public void setLocationValid(boolean isValid) {
isLocationValid_ = isValid;
}
public boolean isLocationValid() {
return isLocationValid_;
}
public void setTemplateParams(Map<String, String> tempParams) {
templateParams = tempParams;
}
public Map<String, String> getTemplateParams() {
return templateParams;
}
public void clearLocation() {
location_ = "";
}
public String getLocation() {
return location_;
}
private void setLocation(String city, WebuiRequestContext requestContext) {
location_ = city;
if (location_ == null || location_ == "") {
UIApplication uiApp = requestContext.getUIApplication();
uiApp.addMessage(new ApplicationMessage("Invalid location!", null, ApplicationMessage.ERROR));
return;
}
templateParams = new LinkedHashMap<String, String>();
templateParams.put(LOCATION, location_);
setLocationValid(true);
}
@Override
public void onActivate(Event<UIActivityComposer> uiActivityComposer) {
}
@Override
public void onSubmit(Event<UIActivityComposer> uiActivityComposer) {
}
@Override
public void onClose(Event<UIActivityComposer> uiActivityComposer) {
}
/* called when user clicks "Share" button.
* create and save activity.
*/
@Override
public void onPostActivity(PostContext postContext, UIComponent uiComponent, WebuiRequestContext requestContext, String postedMessage) throws Exception {
if (postContext == UIComposer.PostContext.SPACE){
UISpaceActivitiesDisplay uiDisplaySpaceActivities = (UISpaceActivitiesDisplay) getActivityDisplay();
Space space = uiDisplaySpaceActivities.getSpace();
Identity spaceIdentity = Utils.getIdentityManager().getOrCreateIdentity(SpaceIdentityProvider.NAME,
space.getPrettyName(),
false);
ExoSocialActivity activity = new ExoSocialActivityImpl(Utils.getViewerIdentity().getId(),
SpaceService.SPACES_APP_ID,
postedMessage,
null);
activity.setType(UIDefaultActivity.ACTIVITY_TYPE);
Utils.getActivityManager().saveActivityNoReturn(spaceIdentity, activity);
uiDisplaySpaceActivities.init();
} else if (postContext == PostContext.USER) {
UIUserActivitiesDisplay uiUserActivitiesDisplay = (UIUserActivitiesDisplay) getActivityDisplay();
Identity ownerIdentity = Utils.getIdentityManager().getOrCreateIdentity(OrganizationIdentityProvider.NAME,
uiUserActivitiesDisplay.getOwnerName(), false);
if (postedMessage.length() > 0) {
postedMessage += "<br>";
}
if (this.getLocation() != null && this.getLocation().length() > 0) {
postedMessage += String.format("%s checked in at %s.", ownerIdentity.getProfile().getFullName(), this.getLocation());
} else {
postedMessage += String.format("%s checked in at Nowhere.", ownerIdentity.getProfile().getFullName());
}
ExoSocialActivity activity = new ExoSocialActivityImpl(Utils.getViewerIdentity().getId(),
PeopleService.PEOPLE_APP_ID,
postedMessage,
null);
activity.setType(UIDefaultActivity.ACTIVITY_TYPE);
activity.setTemplateParams(templateParams);
this.clearLocation();
Utils.getActivityManager().saveActivityNoReturn(ownerIdentity, activity);
this.setLocationValid(false);
if (uiUserActivitiesDisplay.getSelectedDisplayMode() == DisplayMode.MY_SPACE) {
uiUserActivitiesDisplay.setSelectedDisplayMode(DisplayMode.ALL_ACTIVITIES);
}
}
}
public static class CheckinActionListener extends EventListener<SampleActivityComposer> {
// this is called on event "Checkin" (when users clicks Check-in button).
@Override
public void execute(Event<SampleActivityComposer> event) throws Exception {
WebuiRequestContext requestContext = event.getRequestContext();
SampleActivityComposer sampleActivityComposer = event.getSource();
String city;
try {
city = requestContext.getRequestParameter(OBJECTID).trim();
} catch (Exception e) {
System.out.println("Exception when getting OBJECTID!");
return;
}
if (city != null && city.length() > 0) {
sampleActivityComposer.setLocationValid(true);
} else {
sampleActivityComposer.setLocationValid(false);
}
sampleActivityComposer.setLocation(city, requestContext);
if (sampleActivityComposer.location_ != null && sampleActivityComposer.location_.length() > 0) {
requestContext.addUIComponentToUpdateByAjax(sampleActivityComposer);
event.getSource().setReadyForPostingActivity(true);
}
}
}
}