// Path: src/com/nvinayshetty/DTOnator/ClassCreator/ClassCreatorStrategy.java
// public abstract class ClassCreatorStrategy {
// 
//     public abstract void addClass(PsiClass psiClass);
// 
//     public void organizeCodeStyle(PsiClass aClass) {
//         JavaCodeStyleManager styleManager = JavaCodeStyleManager.getInstance(aClass.getProject());
//         styleManager.optimizeImports(aClass.getContainingFile());
//         styleManager.shortenClassReferences(aClass);
//         CodeStyleManager codeStyleManager=CodeStyleManager.getInstance(aClass.getProject());
//         codeStyleManager.reformat(aClass);
// 
//     }
// }
// 
// Path: src/com/nvinayshetty/DTOnator/ClassCreator/KotlinClassCreationStrategy.java
// public abstract class KotlinClassCreationStrategy {
// 
// 
//     public abstract void addClass(KtClass psiClass, FieldCreationStrategy fieldCreationStrategy);
// 
//     public void organizeCodeStyle(KtClass aClass) {
//         JavaCodeStyleManager styleManager = JavaCodeStyleManager.getInstance(aClass.getProject());
//         styleManager.optimizeImports(aClass.getContainingKtFile());
//         styleManager.shortenClassReferences(aClass.getContainingKtFile());
// 
//     }
// }
// 
// Path: src/com/nvinayshetty/DTOnator/FieldCreator/FieldCreationStrategy.java
// public interface FieldCreationStrategy {
//     String getFieldFor(LanguageType languageType, FieldRepresentor type, AccessModifier accessModifier, String key, FieldNameParser parser, NameConflictResolver nameConflictResolver);
// 
//     String getImportDirective();
// 
// }
// 
// Path: src/com/nvinayshetty/DTOnator/nameConflictResolvers/NameConflictResolverCommand.java
// public interface NameConflictResolverCommand {
//     String resolve(String keyword);
// }


import com.nvinayshetty.DTOnator.ClassCreator.ClassCreatorStrategy;
import com.nvinayshetty.DTOnator.ClassCreator.KotlinClassCreationStrategy;
import com.nvinayshetty.DTOnator.FieldCreator.AccessModifier;
import com.nvinayshetty.DTOnator.FieldCreator.FieldCreationStrategy;
import com.nvinayshetty.DTOnator.nameConflictResolvers.NameConflictResolverCommand;
import java.util.EnumSet;
import java.util.HashSet;
/*
 * Copyright (C) 2015 Vinaya Prasad N
 *
 *         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 3 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, see <http://www.gnu.org/licenses/>.
 */

package com.nvinayshetty.DTOnator.DtoCreationOptions;



/**
 * Created by vinay on 20/6/15.
 */
public class DtoCreationOptionsFacade {
    private FieldCreationStrategy fieldCreationStrategy;
    private ClassCreatorStrategy classAdderStrategy;
    private KotlinClassCreationStrategy kotlinClassCreationStrategy;
    private AccessModifier accessModifier;
    private EnumSet<FieldEncapsulationOptions> encapsulationOptionses;

    public DtoCreationOptionsFacade(FieldCreationStrategy fieldCreationStrategy, ClassCreatorStrategy classAdderStrategy, AccessModifier accessModifier, HashSet<NameConflictResolverCommand> nameConflictResolverCommands, EnumSet<FieldEncapsulationOptions> encapsulationOptionses) {
        this.fieldCreationStrategy = fieldCreationStrategy;
        this.classAdderStrategy = classAdderStrategy;
        this.accessModifier = accessModifier;
        this.encapsulationOptionses = encapsulationOptionses;
    }

// Path: src/com/nvinayshetty/DTOnator/ClassCreator/ClassCreatorStrategy.java
// public abstract class ClassCreatorStrategy {
// 
//     public abstract void addClass(PsiClass psiClass);
// 
//     public void organizeCodeStyle(PsiClass aClass) {
//         JavaCodeStyleManager styleManager = JavaCodeStyleManager.getInstance(aClass.getProject());
//         styleManager.optimizeImports(aClass.getContainingFile());
//         styleManager.shortenClassReferences(aClass);
//         CodeStyleManager codeStyleManager=CodeStyleManager.getInstance(aClass.getProject());
//         codeStyleManager.reformat(aClass);
// 
//     }
// }
// 
// Path: src/com/nvinayshetty/DTOnator/ClassCreator/KotlinClassCreationStrategy.java
// public abstract class KotlinClassCreationStrategy {
// 
// 
//     public abstract void addClass(KtClass psiClass, FieldCreationStrategy fieldCreationStrategy);
// 
//     public void organizeCodeStyle(KtClass aClass) {
//         JavaCodeStyleManager styleManager = JavaCodeStyleManager.getInstance(aClass.getProject());
//         styleManager.optimizeImports(aClass.getContainingKtFile());
//         styleManager.shortenClassReferences(aClass.getContainingKtFile());
// 
//     }
// }
// 
// Path: src/com/nvinayshetty/DTOnator/FieldCreator/FieldCreationStrategy.java
// public interface FieldCreationStrategy {
//     String getFieldFor(LanguageType languageType, FieldRepresentor type, AccessModifier accessModifier, String key, FieldNameParser parser, NameConflictResolver nameConflictResolver);
// 
//     String getImportDirective();
// 
// }
// 
// Path: src/com/nvinayshetty/DTOnator/nameConflictResolvers/NameConflictResolverCommand.java
// public interface NameConflictResolverCommand {
//     String resolve(String keyword);
// }


// Path: src/com/nvinayshetty/DTOnator/DtoCreationOptions/DtoCreationOptionsFacade.java
import com.nvinayshetty.DTOnator.ClassCreator.ClassCreatorStrategy;
import com.nvinayshetty.DTOnator.ClassCreator.KotlinClassCreationStrategy;
import com.nvinayshetty.DTOnator.FieldCreator.AccessModifier;
import com.nvinayshetty.DTOnator.FieldCreator.FieldCreationStrategy;
import com.nvinayshetty.DTOnator.nameConflictResolvers.NameConflictResolverCommand;
import java.util.EnumSet;
import java.util.HashSet;

/*
 * Copyright (C) 2015 Vinaya Prasad N
 *
 *         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 3 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, see <http://www.gnu.org/licenses/>.
 */

package com.nvinayshetty.DTOnator.DtoCreationOptions;



/**
 * Created by vinay on 20/6/15.
 */
public class DtoCreationOptionsFacade {
    private FieldCreationStrategy fieldCreationStrategy;
    private ClassCreatorStrategy classAdderStrategy;
    private KotlinClassCreationStrategy kotlinClassCreationStrategy;
    private AccessModifier accessModifier;
    private EnumSet<FieldEncapsulationOptions> encapsulationOptionses;

    public DtoCreationOptionsFacade(FieldCreationStrategy fieldCreationStrategy, ClassCreatorStrategy classAdderStrategy, AccessModifier accessModifier, HashSet<NameConflictResolverCommand> nameConflictResolverCommands, EnumSet<FieldEncapsulationOptions> encapsulationOptionses) {
        this.fieldCreationStrategy = fieldCreationStrategy;
        this.classAdderStrategy = classAdderStrategy;
        this.accessModifier = accessModifier;
        this.encapsulationOptionses = encapsulationOptionses;
    }

    public DtoCreationOptionsFacade(FieldCreationStrategy fieldCreationStrategy, KotlinClassCreationStrategy classAdderStrategy, AccessModifier accessModifier, HashSet<NameConflictResolverCommand> nameConflictResolverCommands, EnumSet<FieldEncapsulationOptions> encapsulationOptionses) {