/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.essar.automation.dhaval.exceltojava;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 *
 * @author dhaval
 */
public class JavaBean implements CodeGenerator{

    private String className;
    private List<Field> fields;
    private List<Method> methods;
    private List<Package> packages;
    private String packageName;

    public JavaBean() {
        fields = new ArrayList<Field>();
        methods = new ArrayList<Method>();
        packages = new ArrayList<Package>();
    }

    public void setClassName(String className) {
        this.className = className;
    }

    public String getClassName() {
        return className;
    }

    public List<Field> getFields() {
        return Collections.unmodifiableList(fields);
    }

    public void addField(Field field){
        fields.add(field);
    }

    public void addField(Field field, boolean generateGetterSetter){
        fields.add(field);

        if(generateGetterSetter){
            Method getter =new Method();
            getter.setField(field);
            getter.setGetter(true);
            methods.add(getter);

            Method setter =new Method();
            setter.setField(field);
            setter.setSetter(true);
            methods.add(setter);
        }
    }

    public void setPackageName(String packageName) {
        this.packageName = packageName;
    }

    public String getPackageName() {
        return packageName;
    }

    public List<Package> getPackages() {
        return Collections.unmodifiableList(packages);
    }

    public void addPackage(Package packageObj){
        packages.add(packageObj);
    }

    public static enum FieldModifier{
        PRIVATE, PUBLIC;
    }

    public String generateCode() {
        String code = "";

        if(packageName != null && packageName.length() > 0){
            code += "package " + packageName + ";";
        }

        if(!packages.isEmpty()){
            code += "\n";
            for(Package packageObj : packages){
                code += packageObj.generateCode();
            }
            code += "\n\n";
        }

        code += "public class " + className + "{";
        for(Field field : fields){
            code += field.generateCode();
        }
        code += "\n";
        for(Method method : methods){
            code += method.generateCode();
        }
        code += "\n}";
        return code;
    }

    public List<Method> getMethods() {
        return Collections.unmodifiableList(methods);
    }

    public void addMethod(Method method){
        methods.add(method);
    }
}
