// Path: src/main/java/de/mprengemann/intellij/plugin/androidicons/controllers/IController.java
// public interface IController<T> {
//     void addObserver(T observer);
// 
//     void removeObserver(T observer);
// 
//     void tearDown();
// }
// 
// Path: src/main/java/de/mprengemann/intellij/plugin/androidicons/model/Destination.java
// public enum Destination {
//     DRAWABLE("drawable"),
//     MIPMAP("mipmap");
// 
// 
//     private final String folderName;
// 
//     Destination(String folderName) {
//         this.folderName = folderName;
//     }
// 
//     public String getFolderName() {
//         return folderName;
//     }
// 
// }
// 
// Path: src/main/java/de/mprengemann/intellij/plugin/androidicons/model/Format.java
// public enum Format {
//     JPG,
//     PNG,
//     XML;
// 
//     private static final Format[] NON_VECTOR_VALUES = new Format[] {
//         JPG, PNG
//     };
// 
//     public static Format[] nonVectorValues() {
//         return NON_VECTOR_VALUES;
//     }
// }
// 
// Path: src/main/java/de/mprengemann/intellij/plugin/androidicons/model/ImageAsset.java
// public class ImageAsset implements Comparable<ImageAsset>,
//                                    Serializable {
// 
//     private final String name;
//     private final String pack;
//     private final String category;
//     private final List<Resolution> resolutions;
//     private final List<String> colors;
//     private final List<String> sizes;
// 
//     public ImageAsset(String name,
//                       String pack,
//                       String category,
//                       List<Resolution> resolutions,
//                       List<String> colors,
//                       List<String> sizes) {
//         this.name = name;
//         this.pack = pack;
//         this.category = category;
//         this.resolutions = resolutions;
//         this.colors = colors;
//         this.sizes = sizes;
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public String getIconPack() {
//         return pack;
//     }
// 
//     public String getCategory() {
//         return category;
//     }
// 
//     public List<Resolution> getResolutions() {
//         return resolutions;
//     }
// 
//     public List<String> getColors() {
//         return colors;
//     }
// 
//     public List<String> getSizes() {
//         return sizes;
//     }
// 
//     @Override
//     public String toString() {
//         return name;
//     }
// 
//     @Override
//     public int compareTo(@NotNull ImageAsset o) {
//         return getName().compareTo(o.getName());
//     }
// }
// 
// Path: src/main/java/de/mprengemann/intellij/plugin/androidicons/model/Resolution.java
// public enum Resolution {
//     LDPI,
//     MDPI,
//     HDPI,
//     XHDPI,
//     XXHDPI,
//     XXXHDPI,
//     TVDPI,
//     ANYDPI;
// 
//     private static final Resolution[] RESOLUTIONS_WITHOUT_SVG = new Resolution[] {
//         LDPI, MDPI, HDPI, XHDPI, XXHDPI, XXXHDPI, TVDPI
//     };
// 
//     public static Resolution[] nonVectorValues() {
//         return RESOLUTIONS_WITHOUT_SVG;
//     }
// 
//     public static Resolution from(String value) {
//         if (TextUtils.isEmpty(value)) {
//             throw new IllegalArgumentException();
//         }
//         if (value.equalsIgnoreCase(LDPI.toString())) {
//             return LDPI;
//         } else if (value.equalsIgnoreCase(MDPI.toString())) {
//             return MDPI;
//         } else if (value.equalsIgnoreCase(HDPI.toString())) {
//             return HDPI;
//         } else if (value.equalsIgnoreCase(XHDPI.toString())) {
//             return XHDPI;
//         } else if (value.equalsIgnoreCase(XXHDPI.toString())) {
//             return XXHDPI;
//         } else if (value.equalsIgnoreCase(XXXHDPI.toString())) {
//             return XXXHDPI;
//         } else if (value.equalsIgnoreCase(TVDPI.toString())) {
//             return TVDPI;
//         } else if (value.equalsIgnoreCase(ANYDPI.toString())) {
//             return ANYDPI;
//         }
//         return null;
//     }
// 
//     public static class Deserializer implements JsonDeserializer<Resolution> {
//         @Override
//         public Resolution deserialize(JsonElement jsonElement,
//                                   Type type,
//                                   JsonDeserializationContext jsonDeserializationContext) throws JsonParseException {
//             return Resolution.from(jsonElement.getAsString());
//         }
//     }
// }


import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
import de.mprengemann.intellij.plugin.androidicons.controllers.IController;
import de.mprengemann.intellij.plugin.androidicons.images.ResizeAlgorithm;
import de.mprengemann.intellij.plugin.androidicons.model.Destination;
import de.mprengemann.intellij.plugin.androidicons.model.Format;
import de.mprengemann.intellij.plugin.androidicons.model.ImageAsset;
import de.mprengemann.intellij.plugin.androidicons.model.Resolution;
import java.util.Set;
package de.mprengemann.intellij.plugin.androidicons.controllers.settings;



public interface ISettingsController extends IController<SettingsObserver> {
    void saveResRootForProject(String fileUrl);
    VirtualFile getResourceRoot();
    String getResourceRootPath();

    String getLastImageFolder();
    void saveLastImageFolder(String fileUrl);

    void setProject(Project project);

    void saveResolutions(Set<Resolution> resolutions);
    Set<Resolution> getResolutions(Set<Resolution> defaultResolutions);

    void saveSourceResolution(Resolution sourceResolution);
    Resolution getSourceResolution(Resolution defaultSourceResolution);

    void saveAlgorithm(ResizeAlgorithm algorithm);
    ResizeAlgorithm getAlgorithm(ResizeAlgorithm defaultAlgorithm);

    void saveMethod(String method);
    String getMethod(String defaultMethod);

    void saveColor(String color);
    String getColor();

// Path: src/main/java/de/mprengemann/intellij/plugin/androidicons/controllers/IController.java
// public interface IController<T> {
//     void addObserver(T observer);
// 
//     void removeObserver(T observer);
// 
//     void tearDown();
// }
// 
// Path: src/main/java/de/mprengemann/intellij/plugin/androidicons/model/Destination.java
// public enum Destination {
//     DRAWABLE("drawable"),
//     MIPMAP("mipmap");
// 
// 
//     private final String folderName;
// 
//     Destination(String folderName) {
//         this.folderName = folderName;
//     }
// 
//     public String getFolderName() {
//         return folderName;
//     }
// 
// }
// 
// Path: src/main/java/de/mprengemann/intellij/plugin/androidicons/model/Format.java
// public enum Format {
//     JPG,
//     PNG,
//     XML;
// 
//     private static final Format[] NON_VECTOR_VALUES = new Format[] {
//         JPG, PNG
//     };
// 
//     public static Format[] nonVectorValues() {
//         return NON_VECTOR_VALUES;
//     }
// }
// 
// Path: src/main/java/de/mprengemann/intellij/plugin/androidicons/model/ImageAsset.java
// public class ImageAsset implements Comparable<ImageAsset>,
//                                    Serializable {
// 
//     private final String name;
//     private final String pack;
//     private final String category;
//     private final List<Resolution> resolutions;
//     private final List<String> colors;
//     private final List<String> sizes;
// 
//     public ImageAsset(String name,
//                       String pack,
//                       String category,
//                       List<Resolution> resolutions,
//                       List<String> colors,
//                       List<String> sizes) {
//         this.name = name;
//         this.pack = pack;
//         this.category = category;
//         this.resolutions = resolutions;
//         this.colors = colors;
//         this.sizes = sizes;
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public String getIconPack() {
//         return pack;
//     }
// 
//     public String getCategory() {
//         return category;
//     }
// 
//     public List<Resolution> getResolutions() {
//         return resolutions;
//     }
// 
//     public List<String> getColors() {
//         return colors;
//     }
// 
//     public List<String> getSizes() {
//         return sizes;
//     }
// 
//     @Override
//     public String toString() {
//         return name;
//     }
// 
//     @Override
//     public int compareTo(@NotNull ImageAsset o) {
//         return getName().compareTo(o.getName());
//     }
// }
// 
// Path: src/main/java/de/mprengemann/intellij/plugin/androidicons/model/Resolution.java
// public enum Resolution {
//     LDPI,
//     MDPI,
//     HDPI,
//     XHDPI,
//     XXHDPI,
//     XXXHDPI,
//     TVDPI,
//     ANYDPI;
// 
//     private static final Resolution[] RESOLUTIONS_WITHOUT_SVG = new Resolution[] {
//         LDPI, MDPI, HDPI, XHDPI, XXHDPI, XXXHDPI, TVDPI
//     };
// 
//     public static Resolution[] nonVectorValues() {
//         return RESOLUTIONS_WITHOUT_SVG;
//     }
// 
//     public static Resolution from(String value) {
//         if (TextUtils.isEmpty(value)) {
//             throw new IllegalArgumentException();
//         }
//         if (value.equalsIgnoreCase(LDPI.toString())) {
//             return LDPI;
//         } else if (value.equalsIgnoreCase(MDPI.toString())) {
//             return MDPI;
//         } else if (value.equalsIgnoreCase(HDPI.toString())) {
//             return HDPI;
//         } else if (value.equalsIgnoreCase(XHDPI.toString())) {
//             return XHDPI;
//         } else if (value.equalsIgnoreCase(XXHDPI.toString())) {
//             return XXHDPI;
//         } else if (value.equalsIgnoreCase(XXXHDPI.toString())) {
//             return XXXHDPI;
//         } else if (value.equalsIgnoreCase(TVDPI.toString())) {
//             return TVDPI;
//         } else if (value.equalsIgnoreCase(ANYDPI.toString())) {
//             return ANYDPI;
//         }
//         return null;
//     }
// 
//     public static class Deserializer implements JsonDeserializer<Resolution> {
//         @Override
//         public Resolution deserialize(JsonElement jsonElement,
//                                   Type type,
//                                   JsonDeserializationContext jsonDeserializationContext) throws JsonParseException {
//             return Resolution.from(jsonElement.getAsString());
//         }
//     }
// }


// Path: src/main/java/de/mprengemann/intellij/plugin/androidicons/controllers/settings/ISettingsController.java
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
import de.mprengemann.intellij.plugin.androidicons.controllers.IController;
import de.mprengemann.intellij.plugin.androidicons.images.ResizeAlgorithm;
import de.mprengemann.intellij.plugin.androidicons.model.Destination;
import de.mprengemann.intellij.plugin.androidicons.model.Format;
import de.mprengemann.intellij.plugin.androidicons.model.ImageAsset;
import de.mprengemann.intellij.plugin.androidicons.model.Resolution;
import java.util.Set;

package de.mprengemann.intellij.plugin.androidicons.controllers.settings;



public interface ISettingsController extends IController<SettingsObserver> {
    void saveResRootForProject(String fileUrl);
    VirtualFile getResourceRoot();
    String getResourceRootPath();

    String getLastImageFolder();
    void saveLastImageFolder(String fileUrl);

    void setProject(Project project);

    void saveResolutions(Set<Resolution> resolutions);
    Set<Resolution> getResolutions(Set<Resolution> defaultResolutions);

    void saveSourceResolution(Resolution sourceResolution);
    Resolution getSourceResolution(Resolution defaultSourceResolution);

    void saveAlgorithm(ResizeAlgorithm algorithm);
    ResizeAlgorithm getAlgorithm(ResizeAlgorithm defaultAlgorithm);

    void saveMethod(String method);
    String getMethod(String defaultMethod);

    void saveColor(String color);
    String getColor();

    void saveSize(String size);