Package de.jetwick.config

Source Code of de.jetwick.config.DefaultModule

/**
* Copyright (C) 2010 Peter Karich <jetwick_@_pannous_._info>
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*         http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package de.jetwick.config;

import com.google.inject.AbstractModule;
import com.google.inject.Provider;
import de.jetwick.data.JTweet;
import de.jetwick.es.AbstractElasticSearch;
import de.jetwick.es.ElasticNode;
import de.jetwick.es.ElasticTagSearch;
import de.jetwick.es.ElasticTweetSearch;
import de.jetwick.es.ElasticUserSearch;
import de.jetwick.rmi.RMIServer;
import de.jetwick.snacktory.HtmlFetcher;
import de.jetwick.tw.Credits;
import de.jetwick.tw.TweetProducer;
import de.jetwick.tw.TweetProducerViaSearch;
import de.jetwick.tw.TwitterSearch;
import de.jetwick.util.GenericUrlResolver;
import de.jetwick.util.MaxBoundSet;
import org.elasticsearch.client.Client;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class DefaultModule extends AbstractModule {

    private final Logger logger = LoggerFactory.getLogger(getClass());
    private Configuration config = new Configuration();

    public DefaultModule() {
    }

    @Override
    protected void configure() {
        logger.info(config.toString());
        bind(Configuration.class).toInstance(config);

        installTweetProducer();
        installLastSearches();
        installTwitterModule();
        installSearchModule();
        installRMIModule();

        HtmlFetcher fetcher = createHtmlFetcher();
        if (fetcher != null)
            bind(HtmlFetcher.class).toInstance(fetcher);

        GenericUrlResolver urlResolver = createGenericUrlResolver();
        if (urlResolver != null)
            bind(GenericUrlResolver.class).toInstance(urlResolver);       
    }

    public void installSearchModule() {
        // TODO shouldn't fail when node is not available!!??
        Client client = AbstractElasticSearch.createClient(ElasticNode.CLUSTER,
                config.getTweetSearchUrl(), ElasticNode.PORT);

        ElasticTweetSearch tweetSearch = new ElasticTweetSearch(client);
        try {
            tweetSearch.nodeInfo();
        } catch (Exception ex) {
            logger.warn("Problem to get node info:" + ex.getMessage());
        }
        bind(ElasticTweetSearch.class).toInstance(tweetSearch);

        ElasticUserSearch userSearch = new ElasticUserSearch(client);
        bind(ElasticUserSearch.class).toInstance(userSearch);

        ElasticTagSearch tagSearch = new ElasticTagSearch(client);
        bind(ElasticTagSearch.class).toInstance(tagSearch);       
    }

    public GenericUrlResolver createGenericUrlResolver() {
        final GenericUrlResolver urlResolver = new GenericUrlResolver(config.getUrlResolverQueueSize());
        urlResolver.setResolveThreads(config.getUrlResolverThreads());
        urlResolver.setResolveTimeout(config.getUrlResolverTimeout());
//        urlResolver.setMaxQueueSize(config.getUrlResolverHelperQueueSize());       
        return urlResolver;
    }

    public void installRMIModule() {
        bind(RMIServer.class).toInstance(new RMIServer(config));
    }

    public void installTwitterModule() {
        final Credits cred = config.getTwitterSearchCredits();
//        logger.info("TWITTER:"+cred.getConsumerKey() + " " + cred.getConsumerSecret());
//        logger.info(cred.getToken() + " " + cred.getTokenSecret());

        final TwitterSearch ts = createTwitterSearch().setConsumer(
                cred.getConsumerKey(), cred.getConsumerSecret());

        try {
            ts.initTwitter4JInstance(cred.getToken(), cred.getTokenSecret(), true);
        } catch (Exception ex) {
            logger.error("Cannot create twitter4j instance!\n######### TWITTER4J ERROR: But start jetwick nevertheless! Error:" + ex);
        }

        bind(TwitterSearch.class).toProvider(new Provider<TwitterSearch>() {

            @Override
            public TwitterSearch get() {
                // avoid exception in this getter: do not call twitter.verify which can fail if twitter down etc
                return createTwitterSearch().setConsumer(
                        cred.getConsumerKey(), cred.getConsumerSecret()).
                        setTwitter4JInstance(ts.getTwitter4JInstance());
            }
        });
    }

    public TwitterSearch createTwitterSearch() {
        return new TwitterSearch();
//        return new TwitterSearchOffline();
    }

    public void installLastSearches() {
        logger.info("install maxBoundSet singleton");
//        bind(MaxBoundSet.class).asEagerSingleton();
        bind(MaxBoundSet.class).toInstance(new MaxBoundSet<String>(250, 500).setMaxAge(10 * 60 * 1000));
    }

    public void installTweetProducer() {
//        bind(TweetProducer.class).to(TweetProducerOffline.class);
        bind(TweetProducer.class).to(TweetProducerViaSearch.class);
    }

    public HtmlFetcher createHtmlFetcher() {
        HtmlFetcher fetcher = new HtmlFetcher();
        fetcher.setMaxTextLength(JTweet.MAX_LENGTH);
        return fetcher;
    }
}
TOP

Related Classes of de.jetwick.config.DefaultModule

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.