/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package aplicacion;
import buscador.Buscable;
import buscador.Buscador;
import buscador.BuscadorAvanzado;
import buscador.TiposDeBusqueda;
import com.twitterapime.model.MetadataSet;
import com.twitterapime.rest.Credential;
import com.twitterapime.rest.TweetER;
import com.twitterapime.rest.UserAccountManager;
import com.twitterapime.search.LimitExceededException;
import com.twitterapime.search.Tweet;
import com.twitterapime.xauth.Token;
import conf.ManejadorDeConfiguracion;
import dbtweets.DbTweets;
import java.io.IOException;
import mail.ServicioCorreo;
/**
*
* @author Alan
*/
public class TweeterFacade {
private DbTweets db;
private Buscable buscador;
private BuscadorAvanzado buscadorAvanzado;
private ManejadorDeConfiguracion cfg;
private AgenteEnvio agenteEnvio;
private ServicioCorreo servicioCorreo;
public TweeterFacade() {
super();
db = DbTweets.getInstance();
cfg=ManejadorDeConfiguracion.getInstance();
agenteEnvio= new AgenteEnvio(this);
agenteEnvio.start();
servicioCorreo= new ServicioCorreo();
}
/*****************************************************************************
* Comunes
*/
private UserAccountManager login() {
String user = (String) cfg.getUser();
String pass = (String) cfg.getPass();
String consumerKey = "LDMQEFW35SC91fM4xtlfVw";
String consumerSecret = "DEjgPTmyWX55j6ZPNefpTZ9ImE7QCLrdyhQslDKoY";
Token token = new Token("173552183-p56LQ2ERm4s5XFuA9bpvB6scAC7RGD9x9gHeb9JA", "NmlPw8GoP32d7AF5RqQAvmmUqfmlM7mJBWyBK1U6DA");
Credential c = new Credential(user, consumerKey, consumerSecret, token);
// Credential c = new Credential(user, pass, consumerKey,consumerSecret);
return UserAccountManager.getInstance(c);
}
public boolean setCredenciales(String u,String p){
Credential c = new Credential(u, p);//, consumerKey,consumerSecret);
try {
if( UserAccountManager.getInstance(c).verifyCredential()){
cfg.setUser(u);
cfg.setPass(p);
return true;
}else{
return false;
}
} catch (IOException ex) {
ex.printStackTrace();
return false;
} catch (LimitExceededException ex) {
ex.printStackTrace();
return false;
}
}
public boolean credencialesValidas(){
try {
return login().verifyCredential();
} catch (IOException ex) {
ex.printStackTrace();
return false;
} catch (LimitExceededException ex) {
ex.printStackTrace();
return false;
}
}
public String getUsuario(){
return cfg.getUser();
}
public String getContrasena(){
return cfg.getPass();
}
public void setUsuario(String user){
cfg.setUser(user);
}
public void setContrasena(String pass){
cfg.setPass(pass);
}
public boolean getAutoSend(){
return cfg.isAutoEnviar();
}
public void setAutoSend(boolean b){
cfg.setAutoEnviar(b);
}
public boolean getTruncarTweets(){
return cfg.isTruncarTweets();
}
public void setTruncarTweets(boolean b){
cfg.setTruncarTweets(b);
}
public int getTweetsPagina(){
return cfg.getTweetsPorpagina();
}
public void setTweetsPagina(int n){
cfg.setTweetsPorpagina(n);
}
public void guardarConfiguracion(){
cfg.saveConfiguration();
}
/*****************************************************************************
* TWeets
*/
public dbtweets.Tweet[] getTweetsSalvados() {
dbtweets.Tweet[] ret = new dbtweets.Tweet[db.getNumberOfRecords()];
db.resetNextId();
int i = 0;
while (db.hasMoreTweets()) {
ret[i++] = db.next();
}
return ret;
}
public void eliminarTweetSalvado(dbtweets.Tweet t) {
db.deleteTweet(t);
}
public void salvarTweetEditado(dbtweets.Tweet t) {
db.saveTweet(t);
}
public void enviarTweetSalvado(dbtweets.Tweet t) {
eliminarTweetSalvado(t);
tweet(t.getContenido());
}
public void enviarTodosTweetsSalvados() {
dbtweets.Tweet[] ts = getTweetsSalvados();
for (int i = 0; i < ts.length; i++) {
enviarTweetSalvado(ts[i]);
}
}
private boolean tweetContent(String contenido){
boolean ret = false;
UserAccountManager m = login();
try {
if (m.verifyCredential()) {
if(contenido.length()>140){
if(cfg.isTruncarTweets()){
}
}
Tweet t = new Tweet(contenido);
TweetER ter = TweetER.getInstance(m);
t = ter.post(t);
ret = true;
} else {
throw new Exception("Sin Credenciales");
}
} catch (Exception e) {
db.saveTweet(new dbtweets.Tweet(contenido));
e.printStackTrace();
}
return ret;
}
class Pedido implements Runnable{
public String contenido;
boolean ret = false;
UserAccountManager m = login();
public void run() {
try {
if (m.verifyCredential()) {
if(contenido.length()>140){
if(cfg.isTruncarTweets()){
contenido=contenido.substring(0, 140);
ret=tweetContent(contenido);
}else{
int i=0;
ret=true;
while(i+140<=contenido.length()){
ret=ret&tweetContent(contenido.substring(i, i+140));
i=i+140;
}
if(i<contenido.length()){
ret=ret&tweetContent(contenido.substring(i, contenido.length()));
}
}
}else{
ret=tweetContent(contenido);
}
} else {
throw new Exception("Sin Credenciales");
}
} catch (Exception e) {
db.saveTweet(new dbtweets.Tweet(contenido));
e.printStackTrace();
}
}
}
public boolean tweet(String contenido) {
boolean ret = false;
UserAccountManager m = login();
try {
// Pedido p= new Pedido();
// p.contenido=contenido;
// Thread t = new Thread(p);
// t.start();
// t.join();
if (m.verifyCredential()) {
if(contenido.length()>140){
if(cfg.isTruncarTweets()){
contenido=contenido.substring(0, 140);
ret=tweetContent(contenido);
}else{
int i=0;
ret=true;
while(i+140<=contenido.length()){
ret=ret&tweetContent(contenido.substring(i, i+140));
i=i+140;
}
if(i<contenido.length()){
ret=ret&tweetContent(contenido.substring(i, contenido.length()));
}
}
}else{
ret=tweetContent(contenido);
}
} else {
throw new Exception("Sin Credenciales");
}
} catch (Exception e) {
db.saveTweet(new dbtweets.Tweet(contenido));
e.printStackTrace();
}
return ret;
}
public boolean reTweet(Tweet t) {
boolean ret = false;
UserAccountManager m = login();
try {
if (m.verifyCredential()) {
TweetER ter = TweetER.getInstance(m);
Tweet t1 = ter.findByID(t.getString(MetadataSet.TWEET_ID));
t1 = ter.repost(t1);
ret = true;
} else {
throw new Exception("Sin Credenciales");
}
} catch (Exception e) {
// db.saveTweet(new dbtweets.Tweet(contenido));
e.printStackTrace();
}
return ret;
}
public int getNumeroTweetsSalvados(){
int ret = db.getNumberOfRecords();
if(ret<0){ret=0;}
return ret;
}
public void cerrarConfiguracion(){
//cfg.cerrar();
}
public boolean enviarCorreo(Tweet mensaje, String destino){
try {
return servicioCorreo.enviarTweet(getUsuario(), mensaje.getString(MetadataSet.TWEET_AUTHOR_NAME)+": "+mensaje.getString(MetadataSet.TWEET_CONTENT), destino);
} catch (IOException ex) {
ex.printStackTrace();
return false;
}
}
/*****************************************************************************
* Busqueda
*/
public Tweet[] buscarTag(String criteria) {
return buscar(criteria, TiposDeBusqueda.POR_TAG);
}
public Tweet[] buscarContenido(String criteria) {
return buscar(criteria, TiposDeBusqueda.POR_CONTENIDO);
}
public Tweet[] buscarAutor(String criteria) {
return buscar(criteria, TiposDeBusqueda.POR_AUTOR);
}
/**
* Busqueda avanzada
* @param criteria [0.ConAll,1.ConAny,2.ConExact,3.ConHash,4.ConNone,5.From,6.Reference,7.Since(DATE),8.to,9.Until(Date)]
* @return
*/
public Tweet[] buscarAvanzada(Object[] criteria) {
return buscar(criteria, TiposDeBusqueda.AVANZADA);
}
public Tweet[] buscarSiguientePagina() {
if (buscador == null) {
return null;
}
return buscador.siguientePagina();
}
private Tweet[] buscar(String criteria, int tipoBusqueda) {
if (buscador == null || buscador.getTipoBusqueda() != tipoBusqueda) {
buscador = new Buscador(criteria, tipoBusqueda);
}
return buscador.siguientePagina();
}
private Tweet[] buscar(Object[]criteria, int tipoBusqueda) {
BuscadorAvanzado b=(BuscadorAvanzado)buscador;
if (buscador == null || buscador.getTipoBusqueda() != tipoBusqueda ||!(b.getCriteria()==criteria)) {
buscador = new BuscadorAvanzado(criteria);
}
return buscador.siguientePagina();
}
}