neembuu.uploader.v2tov3conversion.ConvertUploaderClass.java Source code

Java tutorial

Introduction

Here is the source code for neembuu.uploader.v2tov3conversion.ConvertUploaderClass.java

Source

/*
 * 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;
    }
}