Folder Sharing в Google Docs

Категории: Интернет, Программы, Разработка ПО
Тэги: , , ,

До сих пор средствами Google Docs можно было открывать общий доступ только на документы, и, строго говоря, с точки зрения пользовательского интерфейса ничего не поменялось. Тем не менее, в новой редакции Google Docs API эта фича стала доступной.

Я написал небольшое приложение на Java, для автоматизации этого процесса, до тех пор пока нововведение не будет анонсировано официально.

Для запуска необходимо настроить, например, Eclipse таким образом, и в функцию main скопировать следующий код:

List<String> folderNames = Arrays.asList("Folder1", "Folder2", "...");
List<String> userMails = Arrays.asList("user1@domain.com", "user2@domain.com", "...");
String role = "reader"; // or "owner", "writer", "peeker", "none"
String appsName = "MyComp-MyApps-version";
String username = "username";
String password = "password";
 
if(!role.equals("reader")
&& !role.equals("writer")
&& !role.equals("owner")
&& !role.equals("none")
&& !role.equals("peeker"))  {
	return;
}
 
DocsService client = new DocsService(appsName);
client.setUserCredentials(username, password);
 
DocumentQuery query = new DocumentQuery(new URL("http://docs.google.com/feeds/default/private/full/-/folder"));
DocumentListFeed resultFeed = client.getFeed(query, DocumentListFeed.class);
for (DocumentListEntry entry : resultFeed.getEntries()) {
	for(String name : folderNames) {
		if(entry.getTitle().getPlainText().equalsIgnoreCase(name)) {
			for(String mail : userMails) {
				AclRole aclRole = new AclRole(role);
				AclScope aclScope = new AclScope(AclScope.Type.USER, mail);
				AclEntry aclEntry = new AclEntry();
				aclEntry.setRole(aclRole);
				aclEntry.setScope(aclScope);
				client.insert(new URL(entry.getAclFeedLink().getHref()), aclEntry);
			}
		}
	}
	AclFeed aclFeed = client.getFeed(new URL(entry.getAclFeedLink().getHref()), AclFeed.class);
	for (AclEntry aclEntry : aclFeed.getEntries()) {
	  System.out.println(
		aclEntry.getScope().getValue() + " (" + aclEntry.getScope().getType() + ") : " + aclEntry.getRole().getValue());
	}
}

Здесь списки folderNames и userMails необходимо заполнить соответствующими значениями. Параметр “…” в сигнатуре вызова функции asList – отсебятина, предназначенная просто показать, что количество параметров функции можно смело расширять. В конечном варианте когда его надо убрать. Вместо username и password вписать свои явки и пароли для доступа в к приложениям Google. Ну и роль выставить такую, какую требуется.

Теперь пользователи, с которыми вы разделили доступ к папке, смогут посмотреть на ее содержимое по ссылке: http://docs.google.com/#folders-shared-with-me

Тем не менее, не все сразу безоблачно заработает. Пользователи, которым вы разрешили доступ на изменение, не увидят созданные ими документы в этой папке. Чтобы все заработало как полагается, им необходимо добавить вас в соавторы их документов, а вам необходимо будет перетащить эти документы из общего списка в расшареную папку.

Eclipse Tips #1

Категории: Программы
Тэги: ,

Столкнувшись с разработкой plug-in для IDE Eclipse решил завести отдельную тему этому посвященную.
В первом выпуске немного о menuContribution, commands, Preferences Pages и PreferenceStorage.

Переход от action к commands для расширения GUI оказался очень продуктивным. Но, по моему мнению, главным преимуществом является, как раз, обработка команд. Command Handlers отвечают за выполнение команды, однако таких обработчиков может быть много, и каждый становится активным и обрабатывает команду при определенных условиях.

Подробнее можно почитать тут: http://blog.eclipse-tips.com/2009/01/commands-part-1-actions-vs-commands.html

В качестве, скорее, памятки основные locationURI для menuContribution и еще всего в кучу.

Для главного меню:
eclipse-mainmenu

menu:org.eclipse.ui.main.menu

Для всплывающего меню:
eclipse-popup

popup:org.eclipse.ui.popup.any

Для панели инструментов, как в примере по ссылке выше:

toolbar:org.eclipse.ui.main.toolbar

Для обработчика всплывающего меню в редакторе Java проверка, что именно редактор Java активен:

<activeWhen>
         <with variable="activeEditorId">
       		<equals value="org.eclipse.jdt.ui.CompilationUnitEditor"/>
    	 </with>
</activeWhen>

О создании собственных Preferences Pages в настройках Eclipse подробно тут: http://www.eclipsepluginsite.com/preference-pages.html