/* “Copyright 2012 Megam Systems” 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/>. */ package org.megam.deccanplato.provider.googleapp.handler; import static org.megam.deccanplato.provider.Constants.*; import static org.megam.deccanplato.provider.googleapp.Constants.*; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.http.NameValuePair; import org.apache.http.message.BasicNameValuePair; import org.megam.deccanplato.provider.BusinessActivity; import org.megam.deccanplato.provider.core.BusinessActivityInfo; import org.megam.deccanplato.provider.googleapp.info.AppsForYourDomainClient; import com.google.gdata.data.ParseSource; import com.google.gdata.data.appsforyourdomain.provisioning.UserEntry; import com.google.gdata.data.appsforyourdomain.provisioning.UserFeed; /** * * @author pandiyaraja * * This class implements the business activity of GoogleApp user method. * this class is implemented by using google-gdata-client library, and this class needs * admin user name and password to get authenticate * this class has four methods, to implement business functions, like create, update, * lisd and delete(delete method, delete a user from admin account). */ public class UserImpl implements BusinessActivity { private AppsForYourDomainClient apclient; private BusinessActivityInfo bizInfo; private Map<String, String> args = new HashMap<String, String>(); /** * this method initialize the operations to perform (like create, list, update, delete) * client credential set in this method by calling AppsForYourDomainClient class constructor */ @Override public void setArguments(BusinessActivityInfo tempBizInfo, Map<String, String> tempArgs) { this.bizInfo=tempBizInfo; this.args=tempArgs; try { apclient = new AppsForYourDomainClient(args.get(ADMIN_EMAIL), args.get(ADMIN_PASSWORD), args.get(DOMAIN)); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override public Map<String, String> run() { Map<String, String> outMap = new HashMap<String, String>(); switch (bizInfo.getActivityFunction()) { case CREATE: outMap = create(outMap); break; case LIST: outMap = list(outMap); break; case UPDATE: outMap = update(outMap); break; case DELETE: outMap = delete(outMap); break; default: break; } return outMap; } /** * this method creates a user in a domain. * args map has all the value to create a user in a domain, * user account create by calling AppsForYourDomainClient class createUser method * with client credential apclient * @param outMap * @return outMap has the output */ private Map<String, String> create(Map<String, String> outMap) { try { apclient.createUser(args.get(USER_NAME), args.get(GIVEN_NAME), args.get(FAMILY_NAME), args.get(USER_PASSWORD)); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } outMap.put(OUTPUT, CREATE_STRING); return outMap; } /** * this method lists all user in a domain. * users list by calling AppsForYourDomainClient class retrieveAllUsers method * with client credential apclient * @param outMap * @return outMap has the list of users. */ private Map<String, String> list(Map<String, String> outMap) { List<String> list=new ArrayList<String>(); UserFeed userFeed = null; try { userFeed = apclient.retrieveAllUsers(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } if (userFeed != null) { for (UserEntry userEntry : userFeed.getEntries()) { List<NameValuePair> userlist=new ArrayList<NameValuePair>(); userlist.add(new BasicNameValuePair(USER_NAME, userEntry.getLogin().getUserName())); userlist.add(new BasicNameValuePair(USER_PASSWORD, userEntry.getLogin().getPassword())); //outMap.put("user_name", userEntry.getLogin().getAdmin()); userlist.add(new BasicNameValuePair(FAMILY_NAME, userEntry.getName().getFamilyName())); userlist.add(new BasicNameValuePair(GIVEN_NAME, userEntry.getName().getGivenName())); list.add(userlist.toString()); outMap.put(OUTPUT,list.toString()); } } return outMap; } /** * this method updates a user in a domain. * args map has all the value to update a user in a domain, * user account updated by calling AppsForYourDomainClient class updateUser method * with client credential apclient * @param outMap * @return outMap */ private Map<String, String> update(Map<String, String> outMap) { try { List<String> list=new ArrayList<>(); list.add(args.get(USER)); list.add(args.get(PASSWORD)); UserEntry value=(UserEntry) UserEntry.readEntry((ParseSource) list); apclient.updateUser(args.get(USER_NAME), value); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } outMap.put(OUTPUT, UPDATE_STRING+args.get("user_name")); return outMap; } /** * this method deletes a user in a domain. * args map has all the value to delete a user in a domain, * user account create by calling AppsForYourDomainClient class deleteUser method * with client credential apclient * @param outMap * @return outMap */ private Map<String, String> delete(Map<String, String> outMap) { try { apclient.deleteUser(args.get(USER_NAME)); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } outMap.put(OUTPUT, DELETE_STRING+args.get(USER_NAME)); return outMap; } @Override public String name() { return "user"; } }