Apache команда Абдеры усердно работает на Abdera2. У Abdera2 есть куча новых функций. Посмотрите это письмо Джеймса Снелла, чтобы узнать, что нового и улучшено. Одна из новых функций — поддержка Activity Streams . Если вы не знакомы с потоками действий, посетите основной сайт, чтобы получить представление, но достаточно сказать, что если вы знаете, как работает и выглядит стена Facebook, тогда вы получите базовое представление о том, что такое поток действий. Сегодня я собираюсь показать вам, как создать простой поток действий с IDE NetBeans 7 и Apache Abdera2.
Первый шаг, который вам нужно сделать, поскольку на момент написания этой статьи Abdera2 был доступен только через Subversion, — это загрузить исходный код на ваш компьютер. Вы можете сделать это, войдя в меню команды IDE NetBeans 7 и выбрав: Subversion -> Checkout
Для URL репозитория используйте это: http://svn.apache.org/repos/asf/abdera/abdera2
Вам нужно будет построить проект Abdera2, который, в свою очередь, соберет все собранные зависимости. Когда он будет полностью построен, вы можете перейти к остальной части этой статьи.
Примечание. Если к моменту прочтения этой статьи и наличия jar-файлов Abdera2 их можно просто добавить в проект с помощью поддержки Netbeans IDE 7 Maven.
В среде IDE NetBeans 7 создайте новое приложение Java Maven с именем ActivityStreamExample:
В новом проекте щелкните правой кнопкой мыши на Зависимости и выберите: Добавить Зависимости.
Когда откроется диалоговое окно Add Dependency , выберите вкладку Open Projects и выберите проект Abdera2 Activity .
Ваш файл POM должен выглядеть следующим образом:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.giantflyingsaucer</groupId> <artifactId>ActivityStreamExample</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <name>ActivityStreamExample</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <dependency> <groupId>org.apache.abdera2</groupId> <artifactId>abdera2-activities</artifactId> <version>2.0-SNAPSHOT</version> </dependency> </dependencies> </project>
С этим из пути мы можем наконец начать создавать поток деятельности.
Обратите внимание, что я взял пример исходного кода Abdera2 и изменил его для этой статьи.
Теперь мы создадим несколько мероприятий. Сначала мы создадим человека по имени Джон Доу, который сделает Сару Джонс своей подругой. Затем Джон Доу последует за Джорджем Блэком. Далее Джону Доу понравится фильм и режиссер. Наконец он уедет в отпуск. В последнем упражнении я буду использовать пользовательский глагол, не предоставленный Abdera2, но, поскольку вы можете добавлять новые глаголы на лету, это будет тривиально.
Давайте сначала рассмотрим поток:
Джон Доу -> делает друга -> Сара Джонс
Джон -> следует -> Джордж Блэк
Джон Доу -> любит кино и режиссер -> режиссер Стивен Спилберг
Джон Доу -> уходит в отпуск -> Австрия
Примечание: имейте в виду, что я собираюсь быть многословным в коде, чтобы лучше показать, что происходит.
Внутри файла App.java (созданного Maven по умолчанию) добавьте следующий код:
package com.giantflyingsaucer; import org.apache.abdera2.activities.model.Activity; import org.apache.abdera2.activities.model.Collection; import org.apache.abdera2.activities.model.IO; import org.apache.abdera2.activities.model.Verb; import org.apache.abdera2.activities.model.objects.PersonObject; import static org.apache.abdera2.activities.model.Verb.LIKE; import static org.apache.abdera2.activities.model.Verb.FOLLOW; import static org.apache.abdera2.activities.model.Verb.MAKE_FRIEND; import static org.apache.abdera2.activities.model.Activity.makeActivity; import static org.apache.abdera2.activities.model.objects.PersonObject.makePerson; import static org.apache.abdera2.activities.model.objects.MovieObject.makeMovie; import static org.apache.abdera2.activities.model.objects.NoteObject.makeNote; public class App { public static void main(String[] args) { final IO io = IO.get(); final PersonObject johnDoe = makePerson("John D. Doe").email("[email protected]").get(); Activity makeFriendActivity = makeActivity().actor(johnDoe).verb(MAKE_FRIEND).object( makePerson("Sarah Jones").email("[email protected]").get()).get(); Activity followActivity = makeActivity().actor(johnDoe).verb(FOLLOW).object( makePerson("George Black").email("[email protected]").get()).get(); Activity likeMovieActivity = makeActivity().actor(johnDoe).verb(LIKE).object( makeMovie().displayName("E.T").director(makePerson("Steven Spielberg").get())).get(); Activity vacationActivity = makeActivity().actor(johnDoe).verb(Verb.get("GOES_ON_VACATION")) .object(makeNote().content("I just left for Austria!").get()).get(); System.out.println("\n\n"); makeFriendActivity.writeTo(io, System.out); followActivity.writeTo(io, System.out); likeMovieActivity.writeTo(io, System.out); vacationActivity.writeTo(io, System.out); System.out.println("\n\n"); Collection<Activity> collection = Collection.<Activity>makeCollection() .item(makeFriendActivity) .item(followActivity) .item(likeMovieActivity) .item(vacationActivity).get(); collection.writeTo(System.out); System.out.println("\n\n"); } }
Там будет два типа вывода. Первым будет тип объекта вывода деятельности:
{ "objectType":"activity", "actor":{ "objectType":"person", "displayName":"John D. Doe", "emails":[ "[email protected]" ] }, "verb":"make-friend", "object":{ "objectType":"person", "displayName":"Sarah Jones", "emails":[ "[email protected]" ] } }{ "objectType":"activity", "actor":{ "objectType":"person", "displayName":"John D. Doe", "emails":[ "[email protected]" ] }, "verb":"follow", "object":{ "objectType":"person", "displayName":"George Black", "emails":[ "[email protected]" ] } }{ "objectType":"activity", "actor":{ "objectType":"person", "displayName":"John D. Doe", "emails":[ "[email protected]" ] }, "verb":"like", "object":{ "objectType":"movie", "displayName":"E.T", "director":{ "objectType":"person", "displayName":"Steven Spielberg" } } }{ "objectType":"activity", "actor":{ "objectType":"person", "displayName":"John D. Doe", "emails":[ "[email protected]" ] }, "verb":"GOES_ON_VACATION", "object":{ "objectType":"note", "content":"I just left for Austria!" } }
Вторым будет тип объекта вывода коллекции:
{ "objectType":"collection", "totalItems":4, "items":[ { "objectType":"activity", "actor":{ "objectType":"person", "displayName":"John D. Doe", "emails":[ "[email protected]" ] }, "verb":"make-friend", "object":{ "objectType":"person", "displayName":"Sarah Jones", "emails":[ "[email protected]" ] } }, { "objectType":"activity", "actor":{ "objectType":"person", "displayName":"John D. Doe", "emails":[ "[email protected]" ] }, "verb":"follow", "object":{ "objectType":"person", "displayName":"George Black", "emails":[ "[email protected]" ] } }, { "objectType":"activity", "actor":{ "objectType":"person", "displayName":"John D. Doe", "emails":[ "[email protected]" ] }, "verb":"like", "object":{ "objectType":"movie", "displayName":"E.T", "director":{ "objectType":"person", "displayName":"Steven Spielberg" } } }, { "objectType":"activity", "actor":{ "objectType":"person", "displayName":"John D. Doe", "emails":[ "[email protected]" ] }, "verb":"GOES_ON_VACATION", "object":{ "objectType":"note", "content":"I just left for Austria!" } } ] }
It’s a pretty simple example. If you dig around in the Abdera2 code and examples you’ll see there are a lot of things to experiment with and to add to Activity Streams.