Skip to content
This repository has been archived by the owner on Mar 20, 2021. It is now read-only.

Commit

Permalink
Working, need fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
abeln94 committed Mar 10, 2018
1 parent 5958b9e commit f3a059f
Show file tree
Hide file tree
Showing 8 changed files with 240 additions and 65 deletions.
86 changes: 46 additions & 40 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -1,41 +1,47 @@
buildscript {
ext {
springBootVersion = '1.5.10.RELEASE'
}
repositories {
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}

apply plugin: 'java'
apply plugin: 'org.springframework.boot'
apply plugin: 'idea'
apply plugin: 'eclipse-wtp'

group = 'es.unizar.tmdad'
version = '2018'
sourceCompatibility = 1.8

repositories {
mavenCentral()
}

ext {
boostrapVersion = '4.0.0'
fontawesomeVersion = '5.0.6'
mustacheVersion = '2.3.0'
}

dependencies {
compile('org.springframework.boot:spring-boot-starter-social-twitter')
compile('org.springframework.boot:spring-boot-starter-thymeleaf')
compile('org.springframework.boot:spring-boot-starter-web')
compile('org.springframework.boot:spring-boot-devtools')
compile("org.webjars:bootstrap:${boostrapVersion}")
compile("org.webjars:font-awesome:${fontawesomeVersion}")
compile("org.webjars.bower:mustache:${mustacheVersion}")
testCompile('org.springframework.boot:spring-boot-starter-test')
buildscript {
ext {
springBootVersion = '1.5.10.RELEASE'
}
repositories {
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}

apply plugin: 'java'
apply plugin: 'org.springframework.boot'
apply plugin: 'idea'
apply plugin: 'eclipse-wtp'

group = 'es.unizar.tmdad'
version = '2018'
sourceCompatibility = 1.8

repositories {
mavenCentral()
}

ext {
boostrapVersion = '4.0.0'
fontawesomeVersion = '5.0.6'
//mustacheVersion = '2.3.0'
}

dependencies {
compile('org.springframework.boot:spring-boot-starter-social-twitter')
compile('org.springframework.boot:spring-boot-starter-thymeleaf')
compile('org.springframework.boot:spring-boot-starter-web')
compile('org.springframework.boot:spring-boot-devtools')
compile("org.webjars:bootstrap:${boostrapVersion}")
compile("org.webjars:font-awesome:${fontawesomeVersion}")
//compile("org.webjars.bower:mustache:${mustacheVersion}")

compile("org.springframework.boot:spring-boot-starter-websocket")
compile("org.webjars:stomp-websocket:2.3.3")
compile("org.webjars:sockjs-client:1.0.2")


testCompile('org.springframework.boot:spring-boot-starter-test')
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import es.unizar.tmdad.lab0.service.TwitterLookupService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.messaging.handler.annotation.MessageMapping;
import org.springframework.social.UncategorizedApiException;
import org.springframework.social.twitter.api.SearchResults;
import org.springframework.stereotype.Controller;
Expand Down Expand Up @@ -42,4 +43,17 @@ public String template() {
return "template";
}


@MessageMapping(/*app*/"/register")
public void register(String query) throws Exception {
System.out.println("Received search query ("+query+")");
twitter.registerQuery(query);
}

@MessageMapping(/*app*/"/unregister")
public void unregister(String query) throws Exception {
System.out.println("Received unregister query ("+query+")");
twitter.unregisterQuery(query);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
/*
* AUTOR: Abel Naya Forcano
* NIA: 544125
* FICHERO: SimpleStreamListener.java
* TIEMPO: -
* DESCRIPCI’ON:
*/

package es.unizar.tmdad.lab0.service;

import java.util.HashMap;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.MessageHeaders;
import org.springframework.messaging.handler.annotation.DestinationVariable;
import org.springframework.messaging.handler.annotation.SendTo;
import org.springframework.messaging.simp.SimpMessageSendingOperations;
import org.springframework.social.twitter.api.StreamDeleteEvent;
import org.springframework.social.twitter.api.StreamListener;
import org.springframework.social.twitter.api.StreamWarningEvent;
import org.springframework.social.twitter.api.Tweet;
import org.springframework.util.MimeTypeUtils;

/**
* Clase SimpleStreamListener
*/
public class SimpleStreamListener implements StreamListener{


private final SimpMessageSendingOperations smso;
private final String query;

SimpleStreamListener(String query, SimpMessageSendingOperations smso) {
this.query = query;
this.smso = smso;
}

@Override
public void onTweet(Tweet tweet) {
System.out.println("Received tweet, sending ("+query+")");

Map<String, Object> map = new HashMap<>();
map.put(MessageHeaders.CONTENT_TYPE,MimeTypeUtils.APPLICATION_JSON);
smso.convertAndSend("/topic/search/"+query, tweet, map);

}


@Override
public void onDelete(StreamDeleteEvent deleteEvent) {

}

@Override
public void onLimit(int numberOfLimitedTweets) {
System.out.println("SimpleStreamListener#onLimit");
}

@Override
public void onWarning(StreamWarningEvent warningEvent) {
System.out.println("SimpleStreamListener#onWarning");
}

}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package es.unizar.tmdad.lab0.service;

import java.util.ArrayList;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.social.twitter.api.SearchMetadata;
import org.springframework.social.twitter.api.SearchResults;
Expand All @@ -8,11 +9,22 @@
import org.springframework.stereotype.Service;

import java.util.Collections;
import jdk.nashorn.internal.parser.JSONParser;
import jdk.nashorn.internal.runtime.JSONFunctions;
import java.util.HashMap;
import java.util.List;
import javafx.util.Pair;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.simp.SimpMessageSendingOperations;
import org.springframework.social.twitter.api.Stream;
import org.springframework.social.twitter.api.StreamListener;

@Service
public class TwitterLookupService {


@Autowired
private SimpMessageSendingOperations smso;


@Value("${twitter.consumerKey}")
private String consumerKey;

Expand All @@ -33,5 +45,44 @@ public SearchResults search(String query) {
public SearchResults emptyAnswer() {
return new SearchResults(Collections.emptyList(), new SearchMetadata(0, 0));
}


private final HashMap<String, Pair<Integer,Stream>> queries = new HashMap<>();


public void unregisterQuery(String query){
if ( queries.containsKey(query) ){
Pair<Integer, Stream> pair = queries.remove(query);
if(pair.getKey()>1){
queries.put(query, new Pair<>(pair.getKey()-1,pair.getValue()));
}else{
pair.getValue().close();
}
}else{
System.out.println("Query '"+query+"' not found, couldn't remove");
}
}

public void registerQuery(String query){

if ( queries.containsKey(query) ){

Pair<Integer, Stream> pair = queries.remove(query);
queries.put(query, new Pair<>(pair.getKey()+1,pair.getValue()));

}else{

Twitter twitter = new TwitterTemplate(consumerKey, consumerSecret, accessToken, accessTokenSecret);
List<StreamListener> list = new ArrayList<>();
list.add(new SimpleStreamListener(query, smso));
Stream filter = twitter.streamingOperations().filter(query, list);
queries.put(query,new Pair<>(1,filter));
System.out.println("Register new query ("+query+")");



}
}

}

24 changes: 24 additions & 0 deletions src/main/java/es/unizar/tmdad/lab0/service/WebSocketConfig.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package es.unizar.tmdad.lab0.service;

import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.simp.config.MessageBrokerRegistry;
import org.springframework.web.socket.config.annotation.AbstractWebSocketMessageBrokerConfigurer;
import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
import org.springframework.web.socket.config.annotation.StompEndpointRegistry;

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {

@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/twitter").withSockJS();
}

@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
registry.enableSimpleBroker("/topic");
registry.setApplicationDestinationPrefixes("/app");
}

}
48 changes: 31 additions & 17 deletions src/main/resources/static/functions.js
Original file line number Diff line number Diff line change
@@ -1,37 +1,51 @@
var stompClient = null;
var mustacheTemplate = "-unloaded-";
var subscription = null;

$(document).ready(function() {

$("#search").submit(searchOnClick);

mustacheTemplate = "-unloaded-";
$("#search").submit(streamOnClick);

$.get('template', function(template) {
Mustache.parse(template);
mustacheTemplate = template;
});


stompClient = Stomp.over(new SockJS("/twitter"));//endpoint
stompClient.connect({}, function(frame) {
stompClient.debug = null;
console.log("Connected");
});
});

function searchOnClick(event) {


function streamOnClick(event){
event.preventDefault();

$("#resultsBlock").empty();
$("#loader").show();

var target = $(this).attr('action');
var query = $("#q").val();
$.get(target, { q: query } )
.done( onPostQuery )
.fail( onFailQuery );
}

function onPostQuery(data){

var rendered = Mustache.render(mustacheTemplate, data);

$("#loader").hide();
$("#resultsBlock").append(rendered);
if(subscription !== null){
stompClient.send("/app/unregister",{},subscription[1]);
subscription[0].unsubscribe();
}

stompClient.send("/app/register",{},query);
subscription = [stompClient.subscribe("/topic/search/"+query, onTweetReceived),query];
console.log("subscribed to >>"+query);

}

function onFailQuery(){

function onTweetReceived(tweet){
console.log("received tweet");
var rendered = Mustache.render(mustacheTemplate, JSON.parse(tweet.body));

$("#loader").hide();
$("#resultsBlock").append("-error-");
$("#resultsBlock").append(rendered);
$("#resultsBlock").scrollTop();
}
10 changes: 7 additions & 3 deletions src/main/resources/templates/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -80,12 +80,16 @@

<script defer="" src="https://use.fontawesome.com/releases/v5.0.6/js/all.js"
th:src="@{/webjars/font-awesome/5.0.6/svg-with-js/js/fontawesome-all.js}"></script>

<script th:src="@{/functions.js}"
src="../static/functions.js"></script>


<script src="https://cdnjs.cloudflare.com/ajax/libs/mustache.js/2.3.0/mustache.min.js"></script>

<script src="https://cdnjs.cloudflare.com/ajax/libs/sockjs-client/1.1.4/sockjs.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/stomp.js/2.3.3/stomp.js"></script>


<script th:src="@{/functions.js}"
src="../static/functions.js"></script>

</body>
</html>
4 changes: 1 addition & 3 deletions src/main/resources/templates/template.html
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
{{#tweets}}
<div>
<div class="card p-3">
<div class="card-body">
Expand All @@ -14,5 +13,4 @@ <h5 class="card-title">
<p class="card-text">{{unmodifiedText}}</p>
</div>
</div>
</div>
{{/tweets}}
</div>

0 comments on commit f3a059f

Please sign in to comment.