package com.chrisfolger.needsmoredojo.core.settings;
import com.chrisfolger.needsmoredojo.core.amd.naming.NameException;
import com.intellij.openapi.components.*;
import com.intellij.util.xmlb.XmlSerializerUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.naming.NamingException;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
@State(
name = "NeedsMoreDojoConfiguration",
storages = {
@Storage(id = "default", file = StoragePathMacros.PROJECT_FILE),
@Storage(id = "dir", file = StoragePathMacros.PROJECT_CONFIG_DIR + "/needsmoredojoconfig.xml", scheme = StorageScheme.DIRECTORY_BASED)
}
)
public class DojoSettings implements PersistentStateComponent<DojoSettings>
{
private static final String CURRENT_VERSION = "0.7";
private LinkedHashMap<String, String> amdImportNamingExceptions;
private LinkedHashMap<String, String> ruiImportExceptions;
private List<String> amdImportNamingExceptionsList;
private String dojoSourcesDirectory;
private String projectSourcesDirectory;
private boolean preferRelativeImports;
private boolean dojoSourcesShareProjectSourcesRoot;
private boolean needsMoreDojoEnabled;
private boolean addModuleIfThereAreNoneDefined;
private boolean allowCaseInsensitiveSearch;
private boolean setupWarningDisabled;
private boolean refactoringEnabled;
private String supportedFileTypes;
private boolean singleQuotedModuleIDs;
// this will be used for converting to module specific sources later
private String version;
public DojoSettings()
{
setupWarningDisabled = false;
ruiImportExceptions = new LinkedHashMap<String, String>();
ruiImportExceptions.put("dojox/form/Uploader/IFrame", "IFrame");
ruiImportExceptions.put("dojox/form/Uploader/Flash", "Flash");
ruiImportExceptions.put("dojox/form/Uploader", "Uploader");
amdImportNamingExceptionsList = new ArrayList<String>();
amdImportNamingExceptionsList.add("dojo/sniff(has");
amdImportNamingExceptionsList.add("doh/main(doh");
refactoringEnabled = false;
amdImportNamingExceptions = new LinkedHashMap<String, String>();
amdImportNamingExceptions.put("dojo/sniff", "has");
amdImportNamingExceptions.put("doh/main", "doh");
preferRelativeImports = false;
dojoSourcesShareProjectSourcesRoot = false;
needsMoreDojoEnabled = true;
addModuleIfThereAreNoneDefined = false;
allowCaseInsensitiveSearch = true;
supportedFileTypes = "jsp,js,php,html";
singleQuotedModuleIDs = true;
}
@Deprecated
public @NotNull LinkedHashMap<String, String> getExceptionsMap()
{
return amdImportNamingExceptions;
}
@Deprecated
public @Nullable String getException(@NotNull String module)
{
if(amdImportNamingExceptions.containsKey(module))
{
return amdImportNamingExceptions.get(module);
}
else
{
return null;
}
}
@Deprecated
public LinkedHashMap<String, String> getAmdImportNamingExceptions() {
return amdImportNamingExceptions;
}
public boolean isAllowCaseInsensitiveSearch() {
return allowCaseInsensitiveSearch;
}
public void setAllowCaseInsensitiveSearch(boolean allowCaseInsensitiveSearch) {
this.allowCaseInsensitiveSearch = allowCaseInsensitiveSearch;
}
@Deprecated
public void setAmdImportNamingExceptions(LinkedHashMap<String, String> amdImportNamingExceptions) {
this.amdImportNamingExceptions = amdImportNamingExceptions;
}
public String getDojoSourcesDirectory() {
return dojoSourcesDirectory;
}
public void setDojoSourcesDirectory(String dojoSourcesDirectory) {
this.dojoSourcesDirectory = dojoSourcesDirectory;
}
public String getProjectSourcesDirectory() {
return projectSourcesDirectory;
}
public void setProjectSourcesDirectory(String projectSourcesDirectory) {
this.projectSourcesDirectory = projectSourcesDirectory;
}
public boolean isPreferRelativeImports() {
return preferRelativeImports;
}
public void setPreferRelativeImports(boolean preferRelativeImports) {
this.preferRelativeImports = preferRelativeImports;
}
public LinkedHashMap<String, String> getRuiImportExceptions() {
return ruiImportExceptions;
}
public void setRuiImportExceptions(LinkedHashMap<String, String> ruiImportExceptions) {
this.ruiImportExceptions = ruiImportExceptions;
}
public boolean isDojoSourcesShareProjectSourcesRoot() {
return dojoSourcesShareProjectSourcesRoot;
}
public boolean isAddModuleIfThereAreNoneDefined() {
return addModuleIfThereAreNoneDefined;
}
public void setAddModuleIfThereAreNoneDefined(boolean addModuleIfThereAreNoneDefined) {
this.addModuleIfThereAreNoneDefined = addModuleIfThereAreNoneDefined;
}
public void setDojoSourcesShareProjectSourcesRoot(boolean dojoSourcesShareProjectSourcesRoot) {
this.dojoSourcesShareProjectSourcesRoot = dojoSourcesShareProjectSourcesRoot;
}
public String getSupportedFileTypes() {
return supportedFileTypes;
}
public void setSupportedFileTypes(String supportedFileTypes) {
this.supportedFileTypes = supportedFileTypes;
}
@Nullable
@Override
public DojoSettings getState() {
return this;
}
@Override
public void loadState(DojoSettings state) {
XmlSerializerUtil.copyBean(state, this);
}
public boolean isNeedsMoreDojoEnabled() {
return needsMoreDojoEnabled;
}
public void setNeedsMoreDojoEnabled(boolean needsMoreDojoEnabled) {
this.needsMoreDojoEnabled = needsMoreDojoEnabled;
}
public boolean isSetupWarningDisabled() {
return setupWarningDisabled;
}
public void setSetupWarningDisabled(boolean setupWarningDisabled) {
this.setupWarningDisabled = setupWarningDisabled;
}
public String getVersion() {
return version;
}
public void setVersion(String version) {
this.version = version;
}
public boolean isRefactoringEnabled() {
return refactoringEnabled;
}
public void setRefactoringEnabled(boolean refactoringEnabled) {
this.refactoringEnabled = refactoringEnabled;
}
public boolean isSingleQuotedModuleIDs() {
return singleQuotedModuleIDs;
}
public void setSingleQuotedModuleIDs(boolean aSingleQuotedModuleIDs) {
singleQuotedModuleIDs = aSingleQuotedModuleIDs;
}
public String upgrade()
{
String fromVersion = "";
if(version != null)
{
fromVersion = " from " + version;
}
// any version 0.6 and earlier
if(version == null || version.equals("0.6"))
{
for(final Map.Entry<String, String> entry : amdImportNamingExceptions.entrySet())
{
amdImportNamingExceptionsList.add(entry.getKey() + "(" + entry.getValue());
}
amdImportNamingExceptions = new LinkedHashMap<String, String>();
version = CURRENT_VERSION;
return "Needs More Dojo has upgraded your settings " + fromVersion + " to version " + CURRENT_VERSION;
}
return null;
}
public List<String> getAmdImportNamingExceptionsList() {
return amdImportNamingExceptionsList;
}
public void setAmdImportNamingExceptionsList(List<String> amdImportNamingExceptionsList) {
this.amdImportNamingExceptionsList = amdImportNamingExceptionsList;
}
public List<NameException> getNamingExceptionList()
{
List<NameException> results = new ArrayList<NameException>();
for(String entry : amdImportNamingExceptionsList)
{
String[] items = entry.split("\\(");
results.add(new NameException(items[0], items[1]));
}
return results;
}
}