/blogracy-web/src/main/java/net/blogracy/controller/ActivitiesController.java
Java | 212 lines | 165 code | 23 blank | 24 comment | 12 complexity | 92ffddaea3dd8d0f023ce5cca3f1bac5 MD5 | raw file
- /*
- * Copyright (c) 2011 Enrico Franchi, Michele Tomaiuolo and University of Parma.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
- package net.blogracy.controller;
- import java.io.File;
- import java.io.FileReader;
- import java.io.FileWriter;
- import java.io.IOException;
- import java.security.InvalidParameterException;
- import java.security.MessageDigest;
- import java.security.NoSuchAlgorithmException;
- import java.text.DateFormat;
- import java.text.SimpleDateFormat;
- import java.util.TimeZone;
- import java.util.ArrayList;
- import java.util.Date;
- import java.util.HashMap;
- import java.util.Iterator;
- import java.util.List;
- import java.util.Map;
- import java.util.Map.Entry;
- import javax.jms.Connection;
- import javax.jms.ConnectionFactory;
- import javax.jms.DeliveryMode;
- import javax.jms.Destination;
- import javax.jms.Message;
- import javax.jms.MessageConsumer;
- import javax.jms.MessageListener;
- import javax.jms.MessageProducer;
- import javax.jms.Session;
- import javax.jms.TextMessage;
- import net.blogracy.config.Configurations;
- import net.blogracy.util.FileUtils;
- import org.apache.activemq.ActiveMQConnection;
- import org.apache.activemq.ActiveMQConnectionFactory;
- import org.apache.commons.codec.binary.Base32;
- import org.apache.shindig.protocol.conversion.BeanConverter;
- import org.apache.shindig.protocol.conversion.BeanJsonConverter;
- import org.apache.shindig.social.core.model.ActivityEntryImpl;
- import org.apache.shindig.social.core.model.ActivityObjectImpl;
- import org.apache.shindig.social.core.model.AlbumImpl;
- import org.apache.shindig.social.core.model.MediaItemImpl;
- import org.apache.shindig.social.opensocial.model.ActivityEntry;
- import org.apache.shindig.social.opensocial.model.ActivityObject;
- import org.apache.shindig.social.opensocial.model.Album;
- import org.apache.shindig.social.opensocial.model.MediaItem;
- import org.apache.shindig.social.opensocial.model.MediaItem.Type;
- import org.json.JSONArray;
- import org.json.JSONException;
- import org.json.JSONObject;
- import org.json.JSONTokener;
- import com.google.inject.Binder;
- import com.google.inject.Guice;
- import com.google.inject.Module;
- import com.google.inject.name.Names;
- /**
- * Generic functions to manipulate feeds are defined in this class.
- */
- public class ActivitiesController {
- static final DateFormat ISO_DATE_FORMAT = new SimpleDateFormat(
- "yyyy-MM-dd'T'HH:mm:ss'Z'");
- static final String CACHE_FOLDER = Configurations.getPathConfig()
- .getCachedFilesDirectoryPath();
- private static final FileSharing sharing = FileSharing.getSingleton();
- private static final DistributedHashTable dht = DistributedHashTable
- .getSingleton();
- private static final ActivitiesController theInstance = new ActivitiesController();
- private static BeanJsonConverter CONVERTER = new BeanJsonConverter(
- Guice.createInjector(new Module() {
- @Override
- public void configure(Binder b) {
- b.bind(BeanConverter.class)
- .annotatedWith(
- Names.named("shindig.bean.converter.json"))
- .to(BeanJsonConverter.class);
- }
- }));
- public static ActivitiesController getSingleton() {
- return theInstance;
- }
- public ActivitiesController() {
- ISO_DATE_FORMAT.setTimeZone(TimeZone.getTimeZone("UTC"));
- }
- static public List<ActivityEntry> getFeed(String user) {
- List<ActivityEntry> result = new ArrayList<ActivityEntry>();
- System.out.println("Getting feed: " + user);
- JSONObject record = dht.getRecord(user);
- if (record != null) {
- try {
- String latestHash = FileSharing.getHashFromMagnetURI(record
- .getString("uri"));
- File dbFile = new File(CACHE_FOLDER + File.separator
- + latestHash + ".json");
- if (!dbFile.exists() && record.has("prev")) {
- latestHash = FileSharing.getHashFromMagnetURI(record
- .getString("prev"));
- dbFile = new File(CACHE_FOLDER + File.separator
- + latestHash + ".json");
- }
- if (dbFile.exists()) {
- System.out.println("Getting feed: "
- + dbFile.getAbsolutePath());
- JSONObject db = new JSONObject(new JSONTokener(
- new FileReader(dbFile)));
- JSONArray items = db.getJSONArray("items");
- for (int i = 0; i < items.length(); ++i) {
- JSONObject item = items.getJSONObject(i);
- ActivityEntry entry = (ActivityEntry) CONVERTER
- .convertToObject(item, ActivityEntry.class);
- result.add(entry);
- }
- System.out.println("Feed loaded");
- } else {
- System.out.println("Feed not found");
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- return result;
- }
- public void addFeedEntry(String id, String text, File attachment) {
- try {
- String hash = sharing.hash(text);
- File textFile = new File(CACHE_FOLDER + File.separator + hash
- + ".txt");
- FileWriter w = new FileWriter(textFile);
- w.write(text);
- w.close();
- String textUri = sharing.seed(textFile);
- String attachmentUri = null;
- if (attachment != null) {
- attachmentUri = sharing.seed(attachment);
- }
- final List<ActivityEntry> feed = getFeed(id);
- final ActivityEntry entry = new ActivityEntryImpl();
- entry.setVerb("post");
- entry.setUrl(textUri);
- entry.setPublished(ISO_DATE_FORMAT.format(new Date()));
- entry.setContent(text);
- if (attachment != null) {
- ActivityObject enclosure = new ActivityObjectImpl();
- enclosure.setUrl(attachmentUri);
- entry.setObject(enclosure);
- }
- feed.add(0, entry);
- String feedUri = seedActivityStream(id, feed);
- DistributedHashTable.getSingleton().store(id, feedUri,
- entry.getPublished());
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- public String seedActivityStream(String userId,
- final List<ActivityEntry> feed) throws JSONException, IOException {
- final File feedFile = new File(CACHE_FOLDER + File.separator + userId
- + ".json");
- JSONArray items = new JSONArray();
- for (int i = 0; i < feed.size(); ++i) {
- JSONObject item = new JSONObject(feed.get(i));
- items.put(item);
- }
- JSONObject db = new JSONObject();
- db.put("items", items);
- FileWriter writer = new FileWriter(feedFile);
- db.write(writer);
- writer.close();
- String feedUri = sharing.seed(feedFile);
- return feedUri;
- }
- }