/* * Copyright 2008 Jeff Dwyer * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ package com.apress.progwt.server.web.controllers.facebook; import java.io.IOException; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; import com.apress.progwt.client.domain.User; import com.apress.progwt.server.service.SchoolService; import com.apress.progwt.server.service.UserService; import com.apress.progwt.server.util.HostPrecedingPropertyPlaceholderConfigurer; import com.apress.progwt.server.web.controllers.ControllerUtil; import com.facebook.api.FacebookException; import com.facebook.api.FacebookParam; import com.facebook.api.FacebookRestClient; import com.facebook.api.schema.FriendsGetResponse; /** * * @author Jeff Dwyer */ @Controller public class FacebookController { private static final Logger log = Logger .getLogger(FacebookController.class); private UserService userService; private SchoolService schoolService; @Autowired @Qualifier(value = "propertyConfigurer") private HostPrecedingPropertyPlaceholderConfigurer hostConfigurer; public void setHostConfigurer( HostPrecedingPropertyPlaceholderConfigurer hostConfigurer) { this.hostConfigurer = hostConfigurer; } @RequestMapping("/facebook/infinite.html") public String infiniteHandler(ModelMap map,HttpServletRequest req,HttpServletResponse resp) throws FacebookException, IOException { String apiKey = hostConfigurer.resolvePlaceholder("env.facebook.apikey"); String secret = hostConfigurer.resolvePlaceholder("env.facebook.secret"); log.debug("apikey: "+apiKey); Facebook f = new Facebook(req,resp,apiKey,secret); if(f.requireLogin("")){ log.info("require login redirect"); } map.addAttribute("userID", f.getUser()); map.addAttribute("sessionID", f.getFacebookRestClient()._getSessionKey()); return "facebook/infinite"; } @RequestMapping("/facebook/updateprofile.html") public ModelAndView updateprofileHandler(ModelMap map,HttpServletRequest req,HttpServletResponse resp) throws FacebookException, IOException { String apiKey = hostConfigurer.resolvePlaceholder("env.facebook.apikey"); String secret = hostConfigurer.resolvePlaceholder("env.facebook.secret"); log.debug("apikey: "+apiKey); Facebook f = new Facebook(req,resp,apiKey,secret); updateFBML(f); return new ModelAndView("facebook/canvas","message","profile update ok"); } @RequestMapping("/facebook/canvas.html") public ModelAndView facebookHandler(HttpServletRequest req,HttpServletResponse resp) throws FacebookException, IOException { String apiKey = hostConfigurer.resolvePlaceholder("env.facebook.apikey"); String secret = hostConfigurer.resolvePlaceholder("env.facebook.secret"); log.debug("apikey: "+apiKey); Facebook f = new Facebook(req,resp,apiKey,secret); log.debug("User: "+f.getUser()); log.debug("Is Added: "+f.isAdded()); log.debug("fbparams size: "+f.fbParams.size()); for(String key : f.fbParams.keySet()){ log.debug(key+":"+f.fbParams.get(key)); } log.debug("AAAA: "+f.fbParams.get(FacebookParam.ADDED.getSignatureName())); if(f.requireLogin("")){ log.info("require login redirect"); return null; } FacebookRestClient client = f.getFacebookRestClient(); client.friends_get(); FriendsGetResponse response = (FriendsGetResponse)client.getResponsePOJO(); List<Long> friends = response.getUid(); ModelMap rtn = ControllerUtil.getModelMap(req, userService); User user = userService.getUserByNicknameFullFetch("test"); rtn.addAttribute("viewUser", user); rtn.addAttribute("friends", friends); return new ModelAndView("facebook/canvas",rtn); } /** * update profile of the logged in user * * @param client * @throws IOException */ private void updateFBML(Facebook f) throws IOException { if(f.requireAdd("")){ log.info("require add redirect"); } FacebookRestClient client = f.getFacebookRestClient(); Long userID = client._getUserId(); String profileFBML = "profile from tocollege"; String profileActionFBML = "action fbml"; log.debug("User ID "+userID); try { log.debug("setFBML"); client.profile_setFBML(profileFBML, profileActionFBML); } catch (FacebookException e) { if(e.getCode() == 102){ log.warn("102 error requiring add..."); } log.error(e); } } @Autowired public void setUserService(UserService userService) { this.userService = userService; } @Autowired public void setSchoolService(SchoolService schoolService) { this.schoolService = schoolService; } }