/**
* Copyright (C) 2015 BITPlan GmbH
*
* Pater-Delp-Str. 1
* D-47877 Willich-Schiefbahn
*
* http://www.bitplan.com
*/
package com.bitplan.mediawiki.japi;
import java.util.HashMap;
import java.util.Map;
import java.util.StringTokenizer;
import com.bitplan.mediawiki.japi.ExampleWiki.ExamplePage;
import com.google.inject.AbstractModule;
import com.google.inject.Guice;
import com.google.inject.Injector;
/**
* manager for the Examples
*
* @author wf
*
*/
public class ExampleWikiManager {
// FIXME this is not only for test ...
Injector injector;
/**
* create me with the given module
* @param module
*/
public ExampleWikiManager(AbstractModule module) {
injector= Guice.createInjector(module);
defaultWiki=injector.getInstance(MediawikiApi.class);
}
// lSiteurl,Mediawiki.DEFAULT_SCRIPTPATH
/**
* Map of example Wikis
*/
private Map<String, ExampleWiki> exampleWikis = new HashMap<String, ExampleWiki>();
protected static Map<String, String> aliases = new HashMap<String, String>();
MediawikiApi defaultWiki;
// the wiki to use for single tests / write access
public final String MAIN_TESTWIKI_ID = "wikipedia_org_test2"; // "mediawiki_test2";
// //
/**
* add the given exampleWiki
* @param exampleWiki
* @return the exampleWiki
*/
public ExampleWiki add(ExampleWiki exampleWiki) {
exampleWikis.put(exampleWiki.getWikiId(), exampleWiki);
return exampleWiki;
}
/***
* add an ExampleWiki with the given features
* @param wikiId
* @param siteUrl
* @param defaultScriptpath
* @return
* @throws Exception
*/
private ExampleWiki add(String wikiId, String siteUrl,
String scriptPath) throws Exception {
MediawikiApi wiki=injector.getInstance(MediawikiApi.class);
wiki.init(siteUrl, scriptPath);
ExampleWiki exampleWiki=new ExampleWiki(wikiId,wiki);
add(exampleWiki);
return exampleWiki;
}
/**
* creates an ExampleWiki from the given csvLine
*
* @param csvLine
* @return
* @throws Exception
*/
public ExampleWiki getExampleWikiFromCSV(String csvLine, MediawikiApi wiki)
throws Exception {
ExampleWiki exampleWiki = null;
StringTokenizer st = new StringTokenizer(csvLine, ";");
if (st.hasMoreTokens()) {
st.nextToken(); // what is to do with the first column?
String lSiteurl = st.nextToken();
String lWikiId = st.nextToken();
wiki.setSiteurl(lSiteurl);
exampleWiki = new ExampleWiki(lWikiId, wiki);
st.nextToken(); // what is to do with the version?
String pages = st.nextToken();
pages = pages.replace(",", "");
exampleWiki.setExpectedPages(Integer.valueOf(pages).intValue());
exampleWiki.setLogo("logo"); // FIXME ...
}
return exampleWiki;
}
/**
* get the CSV data
*
* @param urlString
* @throws Exception
*/
public void readCSV(String urlString) throws Exception {
// get csv-String
String csv = Mediawiki.getStringFromUrl(urlString);
String[] csvlines = csv.split("\n");
int lineIndex = 0;
for (String csvLine : csvlines) {
if (lineIndex++ > 0) {
this.add(this.getExampleWikiFromCSV(csvLine, this.defaultWiki));
}
}
}
/**
* get the given Example wiki
*
* @param wikiId
* @return - the example wiki for the given wikiId
* @throws Exception
*/
public ExampleWiki get(String wikiId) throws Exception {
// this code should be (partly?) replaced by csv-access
if (getExampleWikis().size() == 0) {
// String urlString = "http://mediawiki-japi.bitplan.com/mediawiki-japi/index.php/Special:Ask/-5B-5BCategory:ExampleWiki-5D-5D-20-5B-5Bsiteurl::%2B-5D-5D/-3FSiteurl/-3FWikiid/-3FMwversion/-3FMwMinExpectedPages/format%3Dcsv/sep%3D;/offset%3D0";
// FIXME uncomment to activate
// readCSV(urlString);
// Mediawiki site
ExampleWiki wiki = add("wikipedia_org_test2",
//"http://www.mediawiki.org",
"https://test2.wikipedia.org",
Mediawiki.DEFAULT_SCRIPTPATH);
wiki.setExpectedPages(30000);
wiki.setLogo("//test2.wikipedia.org/static/images/project-logos/test2wiki.png");
ExamplePage testPage1 = wiki.new ExamplePage("Asteroid",
"planet");
wiki.addExamplePage("testGetPages", testPage1);
ExamplePage testPage2 = wiki.new ExamplePage("Life",
"humans");
wiki.addExamplePage("testGetPages", testPage2);
/*
* ExamplePage testPage1b = wiki.new ExamplePage("Testpage 1",
* "This is test page 1",true); wiki.addExamplePage("testGetPages",
* testPage1b); wiki.addExamplePage("testEditPages", testPage1b);
*/
// test sites on mediawiki-japi.bitplan.com
// uncommment to enable
// /**
String versions[] = { "1_19", "1_23", "1_24" };
for (String version : versions) {
wiki = add("mediawiki-japi-test" + version,
"http://mediawiki-japi.bitplan.com", "/mw" + version);
wiki.setLogo("http://mediawiki-japi.bitplan.com/images/BITPlanLogo2012_197x118.png");
wiki.setExpectedPages(3);
testPage1 = wiki.new ExamplePage("Testpage 1", "This is test page 1",
true);
wiki.addExamplePage("testGetPages", testPage1);
wiki.addExamplePage("testEditPages", testPage1);
testPage2 = wiki.new ExamplePage("Testpage 2", "This is test page 2",
true);
wiki.addExamplePage("testGetPages", testPage2);
wiki.addExamplePage("testEditPages", testPage2);
ExamplePage testPage3=wiki.new ExamplePage("TestEditSection","=== section 1 ===\n=== section 2 ===\n",true);
wiki.addExamplePage("testSectionEdit",testPage3);
}
// bitplan internal wiki
// wiki = new
// ExampleWiki("capri_bitplan","http://capri.bitplan.com","/mediawiki");
// */
// Please modify this code according to the wikis you used ...
// this is for a copy test - you need read access to the SOURCE_WIKI and
// write access
// to the TARGET_WIKI
final String SOURCE_WIKI = "mediawiki-japi-test1_19";
final String TARGET_WIKI = "mediawiki-japi-test1_23";
final String IMGSRC_WIKI = "mediawiki-japi-test1_24";
aliases.put("sourceWiki", SOURCE_WIKI);
aliases.put("targetWiki", TARGET_WIKI);
aliases.put("imgsrcWiki", IMGSRC_WIKI);
ExampleWiki sourceWiki = getExampleWikis().get(SOURCE_WIKI);
ExamplePage testImage=wiki.new ExamplePage("File:Index.png","",false);
sourceWiki.addExamplePage("testCopy",testImage);
ExamplePage testPage3 = wiki.new ExamplePage("Testpage 3",
"This is test page 3", true);
// this page will by copied so it's only in one wiki for a start
sourceWiki.addExamplePage("testEditPages", testPage3);
sourceWiki.addExamplePage("testCopy", testPage3);
ExamplePage testTemplate=wiki.new ExamplePage("Template:TestTemplate","<noinclude>\n" +
"This is a test Template for the mediawiki-japi Java API copyToWiki function\n" +
"</noinclude>\n" +
"",true);
sourceWiki.addExamplePage("testCopy",testTemplate);
}
// check whether the id is an alias
if (aliases.containsKey(wikiId)) {
wikiId = aliases.get(wikiId);
}
ExampleWiki result = getExampleWikis().get(wikiId);
return result;
}
/**
* @return the exampleWikis
*/
public Map<String, ExampleWiki> getExampleWikis() {
return exampleWikis;
}
/**
* @param exampleWikis
* the exampleWikis to set
*/
public void setExampleWikis(Map<String, ExampleWiki> exampleWikis) {
this.exampleWikis = exampleWikis;
}
}