Package sample.contacts

Source Code of sample.contacts.UnshareProfiles$ProfilesManager

/* Copyright (c) 2008 Google Inc.
*
* 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 sample.contacts;

import com.google.gdata.client.authn.oauth.GoogleOAuthParameters;
import com.google.gdata.client.authn.oauth.OAuthException;
import com.google.gdata.client.authn.oauth.OAuthHmacSha1Signer;
import com.google.gdata.client.contacts.ContactsService;
import com.google.gdata.data.batch.BatchOperationType;
import com.google.gdata.data.batch.BatchStatus;
import com.google.gdata.data.batch.BatchUtils;
import com.google.gdata.data.contacts.ContactEntry;
import com.google.gdata.data.contacts.ContactFeed;
import com.google.gdata.data.contacts.Status;
import com.google.gdata.util.ServiceException;

import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

/**
* UnshareProfiles sample main class.
*
*
*/
public class UnshareProfiles {

  /**
   * Class holding batch processing results.
   *
   *
   */
  public static class BatchResult {
    private int success;
    private int error;
    private List<ContactEntry> errorEntries = new ArrayList<ContactEntry>();

    /**
     * @return the success
     */
    public int getSuccess() {
      return this.success;
    }

    /**
     * @param success the success to set
     */
    public void setSuccess(int success) {
      this.success = success;
    }

    /**
     * @return the error
     */
    public int getError() {
      return this.error;
    }

    /**
     * @param error the error to set
     */
    public void setError(int error) {
      this.error = error;
    }

    /**
     * @return the errorEntries
     */
    public List<ContactEntry> getErrorEntries() {
      return this.errorEntries;
    }

    public List<ContactEntry> addErrorEntry(ContactEntry erroEntry) {
      this.errorEntries.add(erroEntry);
      return this.errorEntries;
    }
  }

  /**
   * Sample main class. Retrieve all profiles for the domain and unshare their
   * contacts information.
   *
   *
   */
  public static class ProfilesManager {
    private String domain;
    private String adminEmail;
    private int batchSize = 100;
    private List<ContactEntry> profiles;
    private ContactsService myService;

    /**
     * Constructor initializing the ContactsService object using 2-Legged OAuth authentication
     * @param consumerKey domain consumer key
     * @param consumerSecret domain consumer secret
     * @param adminEmail domain administrator to authenticate as
     */
    public ProfilesManager(String consumerKey, String consumerSecret, String adminEmail)
        throws OAuthException {
      this.adminEmail = adminEmail;
      this.domain = adminEmail.substring(adminEmail.indexOf('@') + 1);

      GoogleOAuthParameters oauthParameters = new GoogleOAuthParameters();
      oauthParameters.setOAuthConsumerKey(consumerKey);
      oauthParameters.setOAuthConsumerSecret(consumerSecret);

      this.myService = new ContactsService("GoogleInc-UnshareProfiles-1");
      this.myService.setOAuthCredentials(oauthParameters, new OAuthHmacSha1Signer());
    }

    /**
     * @return batch processing size
     */
    public int getBatchSize() {
      return this.batchSize;
    }

    /**
     * @param value the batch processing size to set
     */
    public void setBatchSize(int value) {
      this.batchSize = value;
    }

    /**
     * @return domain's profiles list
     */
    public List<ContactEntry> getProfiles() {
      return this.profiles;
    }

    /**
     * Retrieve all porfiles for the domain
     */
    public void getAllProfiles() throws IOException, ServiceException {
      ArrayList<ContactEntry> profiles = new ArrayList<ContactEntry>();

      URL feedUrl =
          new URL("https://www.google.com/m8/feeds/profiles/domain/" + this.domain
              + "/full?xoauth_requestor_id=" + this.adminEmail);
      while (feedUrl != null) {
        ContactFeed resultFeed = this.myService.getFeed(feedUrl, ContactFeed.class);

        profiles.addAll(resultFeed.getEntries());

        if (resultFeed.getNextLink() != null && resultFeed.getNextLink().getHref() != null
            && resultFeed.getNextLink().getHref().length() > 0) {
          feedUrl = new URL(resultFeed.getNextLink().getHref());
        } else {
          feedUrl = null;
        }
      }
      this.profiles = profiles;
    }

    /**
     * Unshare all profiles information from the GAD/Google Apps Directory
     * @return batch processing result
     * @throws IOException
     * @throws ServiceException
     */
    public BatchResult unshareProfiles() throws IOException, ServiceException {
      if (this.profiles == null) {
        this.getAllProfiles();
      }
      BatchResult result = new BatchResult();
      Status status = new Status();
      int index = 0;

      status.setIndexed(false);
      while (index < this.profiles.size()) {
        ContactFeed requestFeed = new ContactFeed();

        for (int i = 0; i < this.batchSize && index < this.profiles.size(); ++i, ++index) {
          ContactEntry entry = this.profiles.get(index);

          entry.setStatus(status);
          BatchUtils.setBatchOperationType(entry, BatchOperationType.UPDATE);
          requestFeed.getEntries().add(entry);
        }

        ContactFeed responseFeed =
            myService.batch(new URL("https://www.google.com/m8/feeds/profiles/domain/"
                + this.domain + "/full/batch?xoauth_requestor_id=" + this.adminEmail), requestFeed);

        // Check the status of each operation.
        for (ContactEntry entry : responseFeed.getEntries()) {
          BatchStatus batchStatus = BatchUtils.getBatchStatus(entry);

          if (batchStatus.getCode() == 200) {
            result.setSuccess(result.getSuccess() + 1);
          } else {
            result.setError(result.getError() + 1);
            result.addErrorEntry(entry);
          }
        }
      }
      return result;
    }
  }

  /**
   * Run the sample app with the provided arguments.
   * @param args
   * @throws OAuthException
   * @throws IOException
   * @throws ServiceException
   */
  public static void main(String[] args) throws OAuthException, IOException, ServiceException {
    if (args.length != 3) {
      System.out.println("Usage: unshare_profile <consumerKey> <consumerSecret> <adminEmail>");
    } else {
      String consumerKey = args[0];
      String consumerSecret = args[1];
      String adminEmail = args[2];
      ProfilesManager manager = new ProfilesManager(consumerKey, consumerSecret, adminEmail);

      BatchResult result = manager.unshareProfiles();

      System.out.println("Success: " + result.getSuccess() + " - Error: " + result.getError());
      for (ContactEntry entry : result.getErrorEntries()) {
        BatchStatus status = BatchUtils.getBatchStatus(entry);

        System.out.println(" > Failed to update " + entry.getId() + ": (" + status.getCode() + ") "
            + status.getReason());
      }
    }
  }
}
TOP

Related Classes of sample.contacts.UnshareProfiles$ProfilesManager

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.