package exo.samples.assembly;
import java.net.Authenticator;
import java.net.PasswordAuthentication;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.TimeZone;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import org.exoplatform.social.client.model.*;
import org.exoplatform.social.client.rest.connector.ExoSocialConnector;
import org.exoplatform.social.client.rest.connector.HttpUtils;
import org.omg.CORBA._PolicyStub;
public class Executor {
public static ExoSocialConnector connector;
public static String USERNAME, PASSWORD, BASE_URL;
public static final int NUMBER_OF_USERS = 5;
public static final String USERNAME_PREFIX = "user";
public static final String FIRSTNAME = "Test";
public static final String LASTNAME_PREFIX = "User";
public static final String EMAIL_SUFFIX = "@example.com";
public static final String DEFAULT_PASSWORD = "exo"; //default password of new user
public static final int NUMBER_OF_SPACES = 2;
public static final String SPACE_PREFIX = "space";
public static void main(String[] args) throws Exception {
USERNAME = "root";
PASSWORD = "gtn";
BASE_URL = "http://localhost:8080";
connector = new ExoSocialConnector(BASE_URL);
// Login as root
login(USERNAME, PASSWORD);
// Create 100 users
for (int i = 0; i < NUMBER_OF_USERS; i++) {
User user = new User();
user.setUsername(USERNAME_PREFIX + i);
user.setFirstname(FIRSTNAME);
user.setLastname(LASTNAME_PREFIX + i);
user.setEmail(USERNAME_PREFIX + i + EMAIL_SUFFIX);
connector.createUser(user);
}
// Connect everyone together
for (int i = 0; i < (NUMBER_OF_USERS -1); i++) {
for (int j = (i+1); j < NUMBER_OF_USERS; j++) {
UserRelationship connection = new UserRelationship();
connection.setSender(USERNAME_PREFIX + i);
connection.setReceiver(USERNAME_PREFIX + j);
connection.setStatus("confirmed");
connector.createUserRelationship(connection);
}
}
// Create 10 spaces
String[] space_ids = new String[NUMBER_OF_SPACES];
for (int i = 0; i < NUMBER_OF_SPACES; i ++) {
Space space = new Space();
space.setDisplayName(SPACE_PREFIX + i);
Space created_space = connector.createSpace(space);
space_ids[i] = created_space.getId();
}
// Add everyone to every space
for (int i = 0; i < NUMBER_OF_USERS; i++) {
for (int j = 0; j < NUMBER_OF_SPACES; j ++) {
SpaceMembership membership = new SpaceMembership();
membership.setUser(USERNAME_PREFIX + i);
membership.setSpace(SPACE_PREFIX + j);
connector.createSpaceMembership(membership);
}
}
// Login as user0 and post a message
login(USERNAME_PREFIX + 0, DEFAULT_PASSWORD);
Activity activity = new Activity();
activity.setTitle("I got number 0");
Activity created_activity = connector.createUserActivity(USERNAME_PREFIX + 0, activity);
String activity_id = created_activity.getId();
System.out.println(activity_id);
// Login as other users and like and comment
for (int i = 1; i < NUMBER_OF_USERS; i++) {
login(USERNAME_PREFIX + i, DEFAULT_PASSWORD);
connector.likeActivity(activity_id);
Comment comment = new Comment();
//comment.setBody("I got number " + i); //won't work due to SOC-5129
comment.setTitle("I got number " + i); //work-around SOC-5129
connector.createComment(activity_id, comment);
}
}
@SuppressWarnings("restriction")
public static void login(String username, String password) {
final String username_ = username;
final String password_ = password;
//http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6626700
sun.net.www.protocol.http.AuthCacheValue.setAuthCache(new sun.net.www.protocol.http.AuthCacheImpl());
Authenticator.setDefault(new Authenticator() {
@Override
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username_, password_.toCharArray());
}
});
}
public static void userTestCRUD() throws Exception {
final String created = Long.toString(System.currentTimeMillis());
System.out.println("Code: " + created);
login(USERNAME, PASSWORD); //login as root
// print number of users
UserCollection users = connector.getUsers();
System.out.println("Number of users: " + users.getUsers().length);
// create user
User user = new User();
String username = "user_" + created;
user.setUsername(username);
user.setFirstname("Test");
user.setLastname("Test");
user.setEmail(username + "@example.com");
System.out.println(connector.gson.toJson(user));
connector.createUser(user);
// login as new user and update info
login(username, DEFAULT_PASSWORD);
user.setFirstname("TestA");
user.setLastname("TestA");
user.setEmail(username + "@exampleA.com");
System.out.println(connector.gson.toJson(user));
System.out.println(connector.updateUser(user));
// get user info
User edited_user = connector.getUserById(username);
System.out.println(connector.gson.toJson(edited_user));
// login root and delete the user
login(USERNAME, PASSWORD);
connector.deleteUser(username);
users = connector.getUsers();
System.out.println("Number of users: " + users.getUsers().length);
}
public static void userTestPassword() throws Exception {
//set password for new user
String created = Long.toString(System.currentTimeMillis());
System.out.println("Code: " + created);
String username = "user_" + created;
String password = "gtngtn123";
login(USERNAME, PASSWORD);
User user = new User();
user.setUsername(username);
user.setPassword(password);
user.setFirstname("Test");
user.setLastname("Test");
user.setEmail(username + "@example.com");
connector.createUser(user);
//new user logins and updates password
login(username, password);
//System.out.println(HttpUtils.get("http://localhost:8080/rest/private/echo/whoami"));
String newpass = "exoexo123";
user.setPassword(newpass);
user.setEmail(username + "@exampleA.com"); //work around SOC-5119
System.out.println(connector.gson.toJson(user));
connector.updateUser(user);
login(username, newpass);
System.out.println(connector.gson.toJson(connector.getUserById(username)));
}
public static void userTestActivity() throws Exception {
// get activities of today - in local timezone
login(USERNAME, PASSWORD);
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.clear(Calendar.MINUTE);
cal.clear(Calendar.SECOND);
cal.clear(Calendar.MILLISECOND);
Date start_of_day = cal.getTime();
Date end_of_day = new Date(cal.getTimeInMillis() + 1000*60*60*24 -1);
// format dates in "yyyy-MM-dd HH:mm:ss" in UTC timezone
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
df.setTimeZone(TimeZone.getTimeZone("UTC"));
String after = df.format(start_of_day);
String before = df.format(end_of_day);
System.out.println(after);
System.out.println(before);
// query in loop
// due to SOC-5125, we can't rely on returnSize to get total number of items.
// work-around by comparing array length and limit.
int offset = 0;
List<Activity> activities = new ArrayList<Activity>();
ActivityCollection activityCollection = connector.getUserActivities(USERNAME, offset, after, before);
int size = activityCollection.getSize();
int limit = activityCollection.getLimit();
if (activityCollection.activities != null) {
activities.addAll(Arrays.asList(activityCollection.activities));
//while (activities.size() < size) {
while ((activityCollection.activities != null) && !(activityCollection.activities.length < limit)) {
offset = offset + limit;
activityCollection = connector.getUserActivities(USERNAME, offset, after, before);
activities.addAll(Arrays.asList(activityCollection.activities));
}
}
System.out.println(activities.size());
}
public static void userSimplePost() throws Exception {
login(USERNAME, PASSWORD);
System.out.println(connector.postSimpleActivity(USERNAME, "Hey I posted this from a Java app."));
}
public static void userRelationshipTest() throws Exception {
//create user1, user2
login(USERNAME, PASSWORD);
String created = Long.toString(System.currentTimeMillis());
String username1 = "u1_" + created;
String username2 = "u2_" + created;
User user1 = new User();
user1.setUsername(username1);
user1.setFirstname("Test");
user1.setLastname("Test");
user1.setEmail(username1 + "@example.com");
User user2 = new User();
user2.setUsername(username2);
user2.setFirstname("Test");
user2.setLastname("Test");
user2.setEmail(username2 + "@example.com");
connector.createUser(user1);
connector.createUser(user2);
//user1 sends connection request
login(username1, DEFAULT_PASSWORD);
UserRelationship relationship = connector.sendConnectionRequest(username1, username2);
//user2 accepts
login(username2, DEFAULT_PASSWORD);
connector.acceptConnectionRequest(relationship.getId());
//get connections of user2
UserRelationshipCollection relationshipCollection = connector.getUserRelationships();
System.out.println(connector.gson.toJson(relationshipCollection));
}
}