package org.hadatac.console.models;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.UUID;
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.beans.Field;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.client.solrj.response.UpdateResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
import org.hadatac.utils.Collections;
import org.noggit.JSONUtil;
import play.Play;
import com.feth.play.module.pa.user.AuthUser;
public class LinkedAccount {
/**
*
*/
private static final long serialVersionUID = 1L;
public Long id;
@Field("id")
public String id_s;
@Field("provider_user_id")
public String providerUserId;
@Field("provider_key")
public String providerKey;
public SysUser user;
public String getUserId() {
return user.getId();
}
@Field("user_id")
public void setUserId(String id) {
user = SysUser.findByIdSolr(id);
}
public static LinkedAccount findByProviderKey(final SysUser user, String key) {
return findByProviderKeySolr(user, key);
}
public static LinkedAccount findByProviderKeySolr(final SysUser user, String key) {
LinkedAccount account = null;
SolrClient solrClient = new HttpSolrClient(
Play.application().configuration().getString("hadatac.solr.users")
+ Collections.AUTHENTICATE_ACCOUNTS);
SolrQuery solrQuery = new SolrQuery("user_id:" + user.getId() + " AND provider_key:" + key);
try {
QueryResponse queryResponse = solrClient.query(solrQuery);
solrClient.close();
SolrDocumentList list = queryResponse.getResults();
if (list.size() == 1) {
account = convertSolrDocumentToLinkedAccount(list.get(0));
account.user = user;
}
} catch (Exception e) {
System.out.println("[ERROR] LinkedAccount.findByProviderKeySolr - Exception message: " + e.getMessage());
}
return account;
}
public static List<LinkedAccount> findByIdSolr(final SysUser user) {
List<LinkedAccount> accounts = new ArrayList<LinkedAccount>();
SolrClient solrClient = new HttpSolrClient(
Play.application().configuration().getString("hadatac.solr.users")
+ Collections.AUTHENTICATE_ACCOUNTS);
SolrQuery solrQuery = new SolrQuery("user_id:" + user.getId());
try {
QueryResponse queryResponse = solrClient.query(solrQuery);
solrClient.close();
SolrDocumentList list = queryResponse.getResults();
Iterator<SolrDocument> i = list.iterator();
while (i.hasNext()) {
LinkedAccount account = convertSolrDocumentToLinkedAccount(i.next());
account.user = user;
accounts.add(account);
}
} catch (Exception e) {
System.out.println("[ERROR] LinkedAccount.findByIdSolr - Exception message: " + e.getMessage());
}
return accounts;
}
public static String outputAsJson() {
SolrClient solrClient = new HttpSolrClient(
Play.application().configuration().getString("hadatac.solr.users")
+ Collections.AUTHENTICATE_ACCOUNTS);
String query = "*:*";
SolrQuery solrQuery = new SolrQuery(query);
try {
QueryResponse queryResponse = solrClient.query(solrQuery);
solrClient.close();
SolrDocumentList docs = queryResponse.getResults();
return JSONUtil.toJSON(docs);
} catch (Exception e) {
System.out.println("[ERROR] LinkedAccount.outputAsJson - Exception message: " + e.getMessage());
}
return "";
}
public static LinkedAccount create(final AuthUser authUser) {
final LinkedAccount ret = new LinkedAccount();
ret.id_s = UUID.randomUUID().toString();
ret.update(authUser);
return ret;
}
public void update(final AuthUser authUser) {
this.providerKey = authUser.getProvider();
this.providerUserId = authUser.getId();
}
public static LinkedAccount create(final LinkedAccount acc) {
final LinkedAccount ret = new LinkedAccount();
ret.id_s = UUID.randomUUID().toString();
ret.providerKey = acc.providerKey;
ret.providerUserId = acc.providerUserId;
return ret;
}
public void save() {
SolrClient solrClient = new HttpSolrClient(
Play.application().configuration().getString("hadatac.solr.users")
+ Collections.AUTHENTICATE_ACCOUNTS);
try {
solrClient.addBean(this);
solrClient.commit();
solrClient.close();
} catch (Exception e) {
System.out.println("[ERROR] LinkedAccount.save - Exception message: " + e.getMessage());
}
}
public int delete() {
try {
SolrClient solr = new HttpSolrClient(
Play.application().configuration().getString("hadatac.solr.users")
+ Collections.AUTHENTICATE_ACCOUNTS);
UpdateResponse response = solr.deleteById(this.id_s);
solr.commit();
solr.close();
return response.getStatus();
} catch (SolrServerException e) {
System.out.println("[ERROR] LinkedAccount.delete() - SolrServerException message: " + e.getMessage());
} catch (IOException e) {
System.out.println("[ERROR] LinkedAccount.delete() - IOException message: " + e.getMessage());
} catch (Exception e) {
System.out.println("[ERROR] LinkedAccount.delete() - Exception message: " + e.getMessage());
}
return -1;
}
private static LinkedAccount convertSolrDocumentToLinkedAccount(SolrDocument doc) {
LinkedAccount account = new LinkedAccount();
account.id_s = doc.getFieldValue("id").toString();
account.providerUserId = doc.getFieldValue("provider_user_id").toString();
account.providerKey = doc.getFieldValue("provider_key").toString();
return account;
}
}