/*
* Copyright (C) 2014 Shashank
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
package neembuu.uploader.v2tov3conversion;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardOpenOption;
import java.util.LinkedList;
import java.util.List;
import static neembuu.uploader.v2tov3conversion.ConvertAccountClass.r4;
import static neembuu.uploader.v2tov3conversion.ConvertAccountClass.r6;
/**
*
* @author Shashank
*/
public class ConvertUploaderClass {
private final List<String> is,out_lines=new LinkedList<>();
private final String myClassName;
private String displayName=null,accountClassName = null;
private String[]rejectList = {
"import java.io.File;",
//"import org.apache.http.client.CookieStore;",
//"import org.apache.http.client.protocol.ClientContext;",
//"import org.apache.http.impl.client.BasicCookieStore;",
"import neembuuuploader.accountgui.AccountsManager;",
"import neembuuuploader.utils.NeembuuUploaderProperties;",
"import neembuuuploader.uploaders.common.MonitoredFileBody;",
"import neembuuuploader.interfaces.Account;",
"import neembuu.uploader.interfaces.Uploader;",
//"import neembuu.uploader.TranslationProvider;"
};
public ConvertUploaderClass(Path in) throws IOException{
String myClassName = in.getFileName().toString();
myClassName = myClassName.substring(0,myClassName.indexOf("."));
this.myClassName = myClassName;
is = Files.readAllLines(in,Charset.defaultCharset());
}
public void convert(){
findDetails();
boolean consumed = false;
for (String i : is) {
consumed = handlePackageLine(i); if(consumed)continue;
consumed = handleimport(i); if(consumed)continue;
consumed = handleClassAnnotation(i); if(consumed)continue;
consumed = replaceAccountManagerEntry(i); if(consumed)continue;
consumed = handleConstructor(i); if(consumed)continue;
consumed = handle_super(i); if(consumed)continue;
consumed = r4(i,out_lines); if(consumed)continue;
consumed = r6(i,out_lines); if(consumed)continue;
consumed = r7(i); if(consumed)continue;
out_lines.add(i);
}
}
private void findDetails(){
for (String i : is) {
//if(i.matches("host?=?\".*\"")){
String inz = i.replaceAll(" ", "");
if(inz.contains("host=") && !inz.contains("_host")){
if(displayName!=null){
System.err.println("possible double host name issue --->> "+i);
return;
}
try{
displayName = i.substring(i.indexOf("\"")+1,i.lastIndexOf("\""));
}catch(Exception a){
displayName = i.substring(i.indexOf("=")+1,i.lastIndexOf(";"));
}
if(displayName.contains(" ")){
String displayName_new = displayName.substring(
displayName.lastIndexOf(" ")+1);
System.err.println("Display name contains issue --->>"+displayName+" fixing to "+displayName_new);
displayName = displayName_new;
}
System.out.println("found display name="+displayName);
}else if(i.contains("AccountsManager.getAccount")){
if(i.contains("//"))continue;
i = i.replaceAll("private", "");
i = i.trim();
accountClassName = i.substring(0,i.indexOf(' '));
System.out.println("found acccount name="+accountClassName);
}
if(displayName!=null && accountClassName!=null)return;
}
}
public void writeTo(Path out)throws IOException{
Files.write(out, out_lines, Charset.defaultCharset(), StandardOpenOption.CREATE,StandardOpenOption.TRUNCATE_EXISTING, StandardOpenOption.WRITE);
}
private boolean handlePackageLine(String i){
if(i.startsWith("package")){
out_lines.add("package neembuu.uploader.uploaders;");
return true;
}
return false;
}
private boolean handleClassAnnotation(String i){
if(i.startsWith("public class")){
out_lines.add("@SmallModule(");
if(accountClassName!=null){
out_lines.add(" exports={"+myClassName+ ".class,"+accountClassName+ ".class},");
out_lines.add(" interfaces={Uploader.class,Account.class},");
}else {
out_lines.add(" exports={"+myClassName+".class},");
out_lines.add(" interfaces={Uploader.class},");
}
out_lines.add(" name=\""+displayName+ "\"");
out_lines.add(")");
out_lines.add(i);
return true;
}
return false;
}
private boolean sminserted = false;
private boolean handleimport(String i){
if(i.startsWith("import")){
if(!sminserted){
sminserted = true;
out_lines.add("import shashaank.smallmodule.SmallModule;");
out_lines.add("import neembuu.uploader.interfaces.Uploader;");
if(accountClassName!=null)
out_lines.add("import neembuu.uploader.interfaces.Account;");
}
for (String reject : rejectList) {
if(i.matches(reject)){
//System.out.println("rejected "+i);
return true;
}
}
if(i.contains("import neembuuuploader.TranslationProvider;")){
i = "import neembuu.uploader.translation.TranslationProvider;";
}
i = i.replace("neembuuuploader","neembuu.uploader");
out_lines.add(i);
return true;
}
return false;
}
private boolean replaceAccountManagerEntry(String i){
//AccountsManager.
if(i.contains("AccountsManager.getAccount")){
i = i.replace("AccountsManager.getAccount","getAccountsProvider().getAccount");
out_lines.add(i);
return true;
}
return false;
}
private boolean handle_super(String i){
//File file
return (i.contains("super(file);"));
}
private boolean handleConstructor(String i){
if(i.contains("File file")){
i = i.replace("File file","");
out_lines.add(i);
return true;
}
return false;
}
private boolean r7(String i){
if(i.contains("MonitoredFileBody")){
i = i.replace("MonitoredFileBody ", "neembuu.uploader.uploaders.common.MonitoredFileBody ");
out_lines.add(i);
return true;
}return false;
}
}