package mediawiki; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; import mediawiki.info.Project; import mediawiki.request.LoginRequest; public class GlobalMediaWikiConnection { private HashMap<String, String> centralcookies = new HashMap<>(); private boolean login = false; private boolean bot = false; private boolean teststate = false; private LoginRequest loginrequest = null; public GlobalMediaWikiConnection() { } public <T> T request(Project p, MediaWikiRequest<T> r) throws Exception{ return openConnection(p).request(r); } private MediaWikiConnection applySetting(MediaWikiConnection connection){ connection.putCookies(centralcookies); if(login) connection.setLoggedIn(login); if(bot) connection.setBot(bot); if(teststate) connection.setTestState(teststate); connection.setGlobalConnection(this); return connection; } public MediaWikiConnection openConnection(Project p){ MediaWikiConnection connection = new MediaWikiConnection(p); connection = applySetting(connection); return connection; } public MediaWikiConnection openConnection(String l, String p){ MediaWikiConnection connection = new MediaWikiConnection(l,p); connection = applySetting(connection); return connection; } public MediaWikiConnection openConnection(String api){ MediaWikiConnection connection = new MediaWikiConnection(api); connection = applySetting(connection); return connection; } public void putGlobalCookie(String k, String v){ if(k.matches("centralauth\\_.*")) centralcookies.put(k, v); } public void putGlobalCookies(Map<String,String> m){ for(Entry<String,String> e : m.entrySet()){ if(! e.getKey().matches("centralauth\\_.*")) m.remove(e.getKey()); } centralcookies.putAll(m); } protected void setLoggedIn(boolean l){ login = l; } public boolean isLoggedIn(){ return login; } public boolean isBot() { return bot; } public boolean isTestState() { return teststate; } public void setBot(boolean bot) { this.bot = bot; } public void setTestState(boolean teststate) { this.teststate = teststate; } public LoginRequest getLoginRequest() { return loginrequest; } public void setLoginRequest(LoginRequest loginrequest) { this.loginrequest = loginrequest; } }