001    package org.deepamehta.plugins.twitter.migrations;
002    
003    import de.deepamehta.core.Topic;
004    import de.deepamehta.core.TopicType;
005    import de.deepamehta.core.model.*;
006    import de.deepamehta.core.service.Migration;
007    import java.util.logging.Logger;
008    
009    
010    /**
011     * A basic wrapper for the public Twitter Search API and DeepaMehta 4.
012     *
013     * @version 1.2
014     * @author Malte Reißig (<malte@mikromedia.de>)
015     * @website http://github.com/mukil
016     *
017     */
018    
019    public class Migration2 extends Migration {
020    
021        private Logger logger = Logger.getLogger(getClass().getName());
022    
023        private final static String TWEET_URI = "org.deepamehta.twitter.tweet";
024        private final static String TWEET_ID_URI = "org.deepamehta.twitter.tweet_id";
025        private final static String TWEET_TIME_URI = "org.deepamehta.twitter.tweet_time";
026        private final static String TWEET_CONTENT_URI = "org.deepamehta.twitter.tweet_content";
027        private final static String TWEET_ENTITIES_URI = "org.deepamehta.twitter.tweet_entities";
028        private final static String TWEET_METADADA_URI = "org.deepamehta.twitter.tweet_metadata";
029        private final static String TWEET_SOURCE_BUTTON_URI = "org.deepamehta.twitter.tweet_source_button";
030        private final static String TWEET_LOCATION_URI = "org.deepamehta.twitter.tweet_location";
031        private final static String TWEET_FAVOURITE_COUNT_URI = "org.deepamehta.twitter.tweet_favourite_count";
032        private final static String TWEET_WITHHELD_DMCA_URI = "org.deepamehta.twitter.tweet_withheld_copyright";
033        private final static String TWEET_WITHHELD_IN_URI = "org.deepamehta.twitter.tweet_withheld_in";
034        private final static String TWEET_WITHHELD_SCOPE_URI = "org.deepamehta.twitter.tweet_withheld_scope";
035        private final static String TWEETED_TO_STATUS_ID = "org.deepamehta.twitter.tweeted_to_status_id";
036    
037        private final static String TWITTER_USER_URI = "org.deepamehta.twitter.user";
038        private final static String TWITTER_USER_ID_URI = "org.deepamehta.twitter.user_id";
039        private final static String TWITTER_USER_NAME_URI = "org.deepamehta.twitter.user_name";
040        private final static String TWITTER_USER_IMAGE_URI = "org.deepamehta.twitter.user_image_url";
041    
042        private final static String TWITTER_SEARCH_URI = "org.deepamehta.twitter.search";
043        private final static String TWITTER_SEARCH_LANG_URI = "org.deepamehta.twitter.search_language";
044        private final static String TWITTER_SEARCH_LOCATION_URI = "org.deepamehta.twitter.search_location";
045        private final static String TWITTER_SEARCH_TYPE_URI = "org.deepamehta.twitter.search_result_type";
046        private final static String TWITTER_SEARCH_NEXT_PAGE_URI = "org.deepamehta.twitter.search_next_page";
047        private final static String TWITTER_SEARCH_REFRESH_URL_URI = "org.deepamehta.twitter.search_refresh_url";
048        private final static String TWITTER_SEARCH_MAX_TWEET_URI = "org.deepamehta.twitter.search_last_tweet_id";
049        private final static String TWITTER_SEARCH_RESULT_SIZE_URI = "org.deepamehta.twitter.search_result_size";
050        private final static String TWITTER_SEARCH_TIME_URI = "org.deepamehta.twitter.last_search_time";
051    
052        private final static String GEO_COORDINATE_URI = "dm4.geomaps.geo_coordinate";
053    
054        private String COMPOSITION_DEF_EDGE_TYPE = "dm4.core.composition_def";
055        private String ROLE_PARENT_TYPE_URI = "dm4.core.parent_type";
056        private String ROLE_CHILD_TYPE_URI = "dm4.core.child_type";
057    
058        private final static String DEEPAMEHTA_USERNAME_URI = "dm4.accesscontrol.username";
059    
060    
061        private String WS_WEB_RESEARCH_URI = "org.deepamehta.workspaces.web_research";
062    
063        @Override
064        public void run() {
065    
066            // 1) create "Twitter Research"-Workspace
067            TopicModel workspace = new TopicModel(WS_WEB_RESEARCH_URI, "dm4.workspaces.workspace");
068            Topic ws = dms.createTopic(workspace, null);
069            ws.setSimpleValue("Twitter Research");
070            // 2) assign "admin" username to "Twitter Research"-Workspace
071            Topic administrator = dms.getTopic(DEEPAMEHTA_USERNAME_URI, new SimpleValue("admin"), true);
072            assignWorkspace(administrator);
073            // 3) assign all types to our new workspace
074            TopicType twitterSearchType = dms.getTopicType(TWITTER_SEARCH_URI);
075            TopicType searchLang = dms.getTopicType(TWITTER_SEARCH_LANG_URI);
076            TopicType searchLocation = dms.getTopicType(TWITTER_SEARCH_LOCATION_URI);
077            TopicType searchType = dms.getTopicType(TWITTER_SEARCH_TYPE_URI);
078            TopicType searchNextPage = dms.getTopicType(TWITTER_SEARCH_NEXT_PAGE_URI);
079            TopicType searchRefresh = dms.getTopicType(TWITTER_SEARCH_REFRESH_URL_URI);
080            TopicType searchLastId = dms.getTopicType(TWITTER_SEARCH_MAX_TWEET_URI);
081            TopicType searchResultSize = dms.getTopicType(TWITTER_SEARCH_RESULT_SIZE_URI);
082            TopicType searchTime = dms.getTopicType(TWITTER_SEARCH_TIME_URI);
083            //
084            TopicType user = dms.getTopicType(TWITTER_USER_URI);
085            TopicType userId = dms.getTopicType(TWITTER_USER_ID_URI);
086            TopicType userName = dms.getTopicType(TWITTER_USER_NAME_URI);
087            TopicType userImageUrl = dms.getTopicType(TWITTER_USER_IMAGE_URI);
088            //
089            TopicType tweet = dms.getTopicType(TWEET_URI);
090            TopicType tweetId = dms.getTopicType(TWEET_ID_URI);
091            TopicType tweetContent = dms.getTopicType(TWEET_CONTENT_URI);
092            TopicType tweetTimestamp = dms.getTopicType(TWEET_TIME_URI);
093            TopicType tweetEntities = dms.getTopicType(TWEET_ENTITIES_URI);
094            TopicType tweetMetadata = dms.getTopicType(TWEET_METADADA_URI);
095            TopicType tweetSourceButton = dms.getTopicType(TWEET_SOURCE_BUTTON_URI);
096            TopicType tweetLocation = dms.getTopicType(TWEET_LOCATION_URI);
097            TopicType tweetFavouriteCount = dms.getTopicType(TWEET_FAVOURITE_COUNT_URI);
098            TopicType tweetWithheldCopy = dms.getTopicType(TWEET_WITHHELD_DMCA_URI);
099            TopicType tweetWithheldIn = dms.getTopicType(TWEET_WITHHELD_IN_URI);
100            TopicType tweetWithheldScope = dms.getTopicType(TWEET_WITHHELD_SCOPE_URI);
101            TopicType tweetedToStatusId = dms.getTopicType(TWEETED_TO_STATUS_ID);
102            //
103            assignWorkspace(twitterSearchType);
104            assignWorkspace(searchLang);
105            assignWorkspace(searchLocation);
106            assignWorkspace(searchType);
107            assignWorkspace(searchNextPage);
108            assignWorkspace(searchRefresh);
109            assignWorkspace(searchLastId);
110            assignWorkspace(searchResultSize);
111            assignWorkspace(searchTime);
112            //
113            assignWorkspace(user);
114            assignWorkspace(userId);
115            assignWorkspace(userName);
116            assignWorkspace(userImageUrl);
117            //
118            assignWorkspace(tweet);
119            assignWorkspace(tweetId);
120            assignWorkspace(tweetContent);
121            assignWorkspace(tweetTimestamp);
122            assignWorkspace(tweetEntities);
123            assignWorkspace(tweetSourceButton);
124            assignWorkspace(tweetMetadata);
125            assignWorkspace(tweetLocation);
126            assignWorkspace(tweetFavouriteCount);
127            assignWorkspace(tweetWithheldCopy);
128            assignWorkspace(tweetWithheldScope);
129            assignWorkspace(tweetWithheldIn);
130            assignWorkspace(tweetedToStatusId);
131            // 4) Model "Geo Coordinate" to "Tweet"
132            TopicType tweet_type = dms.getTopicType(TWEET_URI);
133            tweet_type.addAssocDef(new AssociationDefinitionModel(
134                    COMPOSITION_DEF_EDGE_TYPE, TWEET_URI, GEO_COORDINATE_URI, "dm4.core.one", "dm4.core.one"));
135        }
136    
137        // === Workspace ===
138    
139        private void assignWorkspace(Topic topic) {
140            Topic defaultWorkspace = dms.getTopic("uri", new SimpleValue(WS_WEB_RESEARCH_URI), false);
141            dms.createAssociation(new AssociationModel("dm4.core.aggregation",
142                new TopicRoleModel(topic.getId(), "dm4.core.parent"),
143                new TopicRoleModel(defaultWorkspace.getId(), "dm4.core.child")
144            ), null);
145        }
146    
147    }