/* 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.gtt; import com.google.gdata.client.gtt.GttService; import sample.util.SimpleCommandLineParser; import com.google.gdata.data.acl.AclEntry; import com.google.gdata.data.acl.AclFeed; import com.google.gdata.data.acl.AclRole; import com.google.gdata.data.acl.AclScope; import com.google.gdata.util.ServiceException; import java.io.IOException; import java.net.URL; /** * Update entry sharing. * * */ public class ShareCommand implements Command { public static final ShareCommand DOCUMENTS_INSTANCE = new ShareCommand("documents"); public static final ShareCommand TMS_INSTANCE = new ShareCommand("tm"); public static final ShareCommand GLOSSARIES_INSTANCE = new ShareCommand("glossary"); protected final String feedName; public ShareCommand(String feedName) { this.feedName = feedName; } public void execute(GttService service, String[] args) throws IOException, ServiceException { SimpleCommandLineParser parser = new SimpleCommandLineParser(args); String entryId = parser.getValue("id"); if (parser.containsKey("list")) { URL feedUrl = FeedUris.getAclFeedUrl(feedName, entryId); System.out.println("Listing all accessors for " + feedName + " with id" + entryId + " ..."); // Get the list of accessors for this entry AclFeed aclFeed = service.getFeed(feedUrl, AclFeed.class); printAclInfo(aclFeed); } else if (parser.containsKey("changetype")) { String changeType = parser.getValue("changetype"); String emailId = parser.getValue("email"); if ("add".equals(changeType)) { AclScope scope = new AclScope(AclScope.Type.USER, emailId); AclRole role = new AclRole(parser.getValue("role")); // Add a new accessor for this entry AclEntry entry = new AclEntry(); entry.setRole(role); entry.setScope(scope); System.out.println("Adding user " + emailId + " as " + role.getValue() + " to " + feedName + " with id " + entryId + " ..."); URL feedUrl = FeedUris.getAclFeedUrl(feedName, entryId); service.insert(feedUrl, entry); System.out.println("...done"); } else if ("change".equals(changeType)) { AclScope scope = new AclScope(AclScope.Type.USER, emailId); AclRole role = new AclRole(parser.getValue("role")); // Change the role of an accessor for this entry AclEntry entry = new AclEntry(); entry.setRole(role); entry.setScope(scope); System.out.println("Changing user " + emailId + "'s access to " + role.getValue() + " for " + feedName + " with id " + entryId + " ..."); URL feedUrl = FeedUris.getAclFeedUrl(feedName, entryId, emailId); service.update(feedUrl, entry); System.out.println("...done"); } else if ("remove".equals(changeType)) { System.out.println("Removing user " + emailId + "'s access to " + feedName + " with id " + entryId + " ..."); URL feedUrl = FeedUris.getAclFeedUrl(feedName, entryId, emailId); // Remove an accessor for this entry service.delete(feedUrl); System.out.println("...done"); } } } private void printAclInfo(AclFeed aclFeed) throws IOException, ServiceException { System.out.println("...done, currently their are " + aclFeed.getEntries().size() + " accessors for this entry.\n"); int i = 1; for (AclEntry entry : aclFeed.getEntries()) { System.out.println(String.valueOf(i++) + ") " + " scope = '" + entry.getScope().getValue() + "'" + ", role = '" + entry.getRole().getValue() + "'"); } } public String helpString() { return "Updates sharing info." + "\n\t--id <id>\t; the id of the entry whose acl needs updation" + "\n\t--list\t; just list the current collaborators, no " + "updation" + "\n\t--changetype <type>\t; one of 'add', 'change', 'remove'" + "\n\t--email <emailid>\t; email id of user who acl is to be " + "updated" + "\n\t--role <role>\t; one of 'owner', 'reader', 'writer', " + "'commenter'"; } }