/*
* External Code Formatter Copyright (c) 2007-2009 Esko Luontola, www.orfjackal.net Licensed under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the
* License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for
* the specific language governing permissions and limitations under the License.
*/
package krasa.formatter.settings;
import com.intellij.util.xmlb.annotations.Transient;
import krasa.formatter.settings.provider.CppPropertiesProvider;
import krasa.formatter.settings.provider.ImportOrderProvider;
import krasa.formatter.settings.provider.JSPropertiesProvider;
import krasa.formatter.settings.provider.JavaPropertiesProvider;
import org.jetbrains.annotations.NotNull;
/**
* @author Esko Luontola
* @author Vojtech Krasa
* @since 4.12.2007
*/
public class Settings {
public static final String LINE_SEPARATOR = "\n";
private String name = null;
private Long id = null;
private String pathToConfigFileJS = "";
private String pathToConfigFileCpp = "";
private boolean enableJavaFormatting = true;
private boolean enableJSFormatting = false;
private boolean enableCppFormatting = false;
@NotNull
private Formatter formatter = Formatter.DEFAULT;
@NotNull
private String pathToConfigFileJava = "";
private String disabledFileTypes = "";
private boolean optimizeImports = true;
private boolean importOrderFromFile = false;
private boolean formatOtherFileTypesWithIntelliJ = true;
private boolean formatSeletedTextInAllFileTypes = true;
private Integer notifyFromTextLenght = 300;
private String importOrder = "java;javax;org;com;";
private String importOrderConfigFilePath = "";
private String selectedJavaProfile = null;
private boolean defaultSettings = false;
private boolean enableGWT = false;
@Transient
protected transient JavaPropertiesProvider javaPropertiesProvider;
@Transient
protected transient JSPropertiesProvider jsPropertiesProvider;
@Transient
protected transient CppPropertiesProvider cppPropertiesProvider;
@Transient
protected transient ImportOrderProvider importOrderProvider;
private boolean enableJSProcessor;
private String selectedJavaScriptProfile;
private String selectedCppProfile;
private boolean useForLiveTemplates = false;
@Deprecated
private boolean useOldEclipseJavaFormatter = false;
private FormatterVersion eclipseVersion = FormatterVersion.NEWEST;
private ImportOrdering importOrdering = ImportOrdering.ECLIPSE_452;
private String pathToEclipse = "";
/**
* NEVER FORGET: add fields to #equalsContent !!
*/
public Settings() {
}
public String getPathToEclipse() {
return pathToEclipse;
}
public FormatterVersion getEclipseVersion() {
return eclipseVersion;
}
public void setEclipseVersion(FormatterVersion eclipseVersion) {
this.eclipseVersion = eclipseVersion;
switch (eclipseVersion) {
case ECLIPSE_44:
useOldEclipseJavaFormatter = true;
break;
case NEWEST:
useOldEclipseJavaFormatter = false;
break;
case CUSTOM:
useOldEclipseJavaFormatter = false;
break;
}
}
public ImportOrdering getImportOrdering() {
return importOrdering;
}
public void setImportOrdering(ImportOrdering importOrdering) {
this.importOrdering = importOrdering;
if (this.importOrdering == ImportOrdering.ECLIPSE_451) {
this.importOrdering = ImportOrdering.ECLIPSE_44;
}
}
public void setPathToEclipse(String pathToEclipse) {
this.pathToEclipse = pathToEclipse;
}
public Settings(Long id, String name) {
this.id = id;
this.name = name;
}
public DisabledFileTypeSettings geDisabledFileTypeSettings() {
return new DisabledFileTypeSettings(disabledFileTypes);
}
public String getSelectedJavaProfile() {
return selectedJavaProfile;
}
public void setSelectedJavaProfile(String selectedJavaProfile) {
javaPropertiesProvider = null;
this.selectedJavaProfile = selectedJavaProfile;
}
public String getPathToConfigFileJS() {
return pathToConfigFileJS;
}
public void setPathToConfigFileJS(final String pathToConfigFileJS) {
jsPropertiesProvider = null;
this.pathToConfigFileJS = pathToConfigFileJS;
}
public String getPathToConfigFileCpp() {
return pathToConfigFileCpp;
}
public void setPathToConfigFileCpp(String pathToConfigFileCpp) {
this.pathToConfigFileCpp = pathToConfigFileCpp;
}
public boolean isEnableJavaFormatting() {
return enableJavaFormatting;
}
public void setEnableJavaFormatting(final boolean enableJavaFormatting) {
this.enableJavaFormatting = enableJavaFormatting;
}
public String getSelectedCppProfile() {
return selectedCppProfile;
}
public void setSelectedCppProfile(String selectedCppProfile) {
this.selectedCppProfile = selectedCppProfile;
}
public boolean isEnableJSFormatting() {
return enableJSFormatting;
}
public boolean isEnableCppFormatting() {
return enableCppFormatting;
}
public void setEnableCppFormatting(boolean enableCppFormatting) {
this.enableCppFormatting = enableCppFormatting;
}
public void setEnableJSFormatting(final boolean enableJSFormatting) {
this.enableJSFormatting = enableJSFormatting;
}
public String getImportOrder() {
return importOrder;
}
public void setImportOrder(final String importOrder) {
this.importOrder = importOrder;
}
public String getImportOrderConfigFilePath() {
return importOrderConfigFilePath;
}
public void setImportOrderConfigFilePath(final String importOrderConfigFilePath) {
importOrderProvider = null;
this.importOrderConfigFilePath = importOrderConfigFilePath;
}
public boolean isDefaultSettings() {
return defaultSettings;
}
public boolean isEnableGWT() {
return enableGWT;
}
public void setEnableGWT(final boolean enableGWT) {
this.enableGWT = enableGWT;
}
public JSPropertiesProvider getJSProperties() {
if (jsPropertiesProvider == null) {
jsPropertiesProvider = new JSPropertiesProvider(this);
}
return jsPropertiesProvider;
}
public CppPropertiesProvider getCppProperties() {
if (cppPropertiesProvider == null) {
cppPropertiesProvider = new CppPropertiesProvider(this);
}
return cppPropertiesProvider;
}
public JavaPropertiesProvider getJavaProperties() {
if (javaPropertiesProvider == null) {
javaPropertiesProvider = new JavaPropertiesProvider(this);
}
return javaPropertiesProvider;
}
public ImportOrderProvider getImportOrderProvider() {
if (importOrderProvider == null) {
importOrderProvider = new ImportOrderProvider(this);
}
return importOrderProvider;
}
public boolean isEnableJSProcessor() {
return enableJSProcessor;
}
public void setEnableJSProcessor(final boolean enableJSProcessor) {
this.enableJSProcessor = enableJSProcessor;
}
public String getSelectedJavaScriptProfile() {
return selectedJavaScriptProfile;
}
public void setSelectedJavaScriptProfile(String selectedJavaScriptProfile) {
jsPropertiesProvider = null;
this.selectedJavaScriptProfile = selectedJavaScriptProfile;
}
public boolean isEnabled() {
return getFormatter() == Formatter.ECLIPSE;
}
boolean isNotSaved() {
return getId() == null && getName() == null;
}
public boolean isUseForLiveTemplates() {
return useForLiveTemplates;
}
public void setUseForLiveTemplates(final boolean useForLiveTemplates) {
this.useForLiveTemplates = useForLiveTemplates;
}
@Deprecated
public boolean isUseOldEclipseJavaFormatter() {
return useOldEclipseJavaFormatter;
}
@Deprecated
public void setUseOldEclipseJavaFormatter(final boolean useOldEclipseJavaFormatter) {
this.useOldEclipseJavaFormatter = useOldEclipseJavaFormatter;
if (useOldEclipseJavaFormatter) {
eclipseVersion = FormatterVersion.ECLIPSE_44;
}
}
public static enum FormatterVersion {
ECLIPSE_44,
NEWEST,
CUSTOM
}
public static enum ImportOrdering {
/** not matching imports -> between groups */
ECLIPSE_44,
@Deprecated
ECLIPSE_451,
/** not matching imports -> on the end, actually since Eclipse 4.5.1 :( oops */
ECLIPSE_452,
}
public static enum Formatter {
DEFAULT,
ECLIPSE
}
public static enum Location {
PROJECT,
APPLICATION
}
public boolean isFormatSeletedTextInAllFileTypes() {
return formatSeletedTextInAllFileTypes;
}
public void setFormatSeletedTextInAllFileTypes(boolean formatSeletedTextInAllFileTypes) {
this.formatSeletedTextInAllFileTypes = formatSeletedTextInAllFileTypes;
}
public boolean isFormatOtherFileTypesWithIntelliJ() {
return formatOtherFileTypesWithIntelliJ;
}
public void setFormatOtherFileTypesWithIntelliJ(boolean formatOtherFileTypesWithIntelliJ) {
this.formatOtherFileTypesWithIntelliJ = formatOtherFileTypesWithIntelliJ;
}
public Integer getNotifyFromTextLenght() {
return notifyFromTextLenght;
}
public void setNotifyFromTextLenght(Integer notifyFromTextLenght) {
this.notifyFromTextLenght = notifyFromTextLenght;
}
public boolean isOptimizeImports() {
return optimizeImports;
}
public String getDisabledFileTypes() {
return disabledFileTypes;
}
public void setDisabledFileTypes(String disabledFileTypes) {
this.disabledFileTypes = disabledFileTypes;
}
public void setOptimizeImports(boolean optimizeImports) {
this.optimizeImports = optimizeImports;
}
@NotNull
public Formatter getFormatter() {
return formatter;
}
public void setFormatter(@NotNull Formatter formatter) {
this.formatter = formatter;
}
@NotNull
public String getPathToConfigFileJava() {
return pathToConfigFileJava;
}
public void setPathToConfigFileJava(@NotNull String pathToConfigFileJava) {
javaPropertiesProvider = null;
this.pathToConfigFileJava = pathToConfigFileJava;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public boolean equalsContent(Object o) {
if (this == o)
return true;
if (o == null || getClass() != o.getClass())
return false;
Settings settings = (Settings) o;
if (enableJavaFormatting != settings.enableJavaFormatting)
return false;
if (enableJSFormatting != settings.enableJSFormatting)
return false;
if (enableCppFormatting != settings.enableCppFormatting)
return false;
if (optimizeImports != settings.optimizeImports)
return false;
if (useOldEclipseJavaFormatter != settings.useOldEclipseJavaFormatter)
return false;
if (importOrderFromFile != settings.importOrderFromFile)
return false;
if (formatOtherFileTypesWithIntelliJ != settings.formatOtherFileTypesWithIntelliJ)
return false;
if (formatSeletedTextInAllFileTypes != settings.formatSeletedTextInAllFileTypes)
return false;
if (defaultSettings != settings.defaultSettings)
return false;
if (enableGWT != settings.enableGWT)
return false;
if (enableJSProcessor != settings.enableJSProcessor)
return false;
if (useForLiveTemplates != settings.useForLiveTemplates)
return false;
if (useOldEclipseJavaFormatter != settings.useOldEclipseJavaFormatter)
return false;
if (pathToConfigFileJS != null ? !pathToConfigFileJS.equals(settings.pathToConfigFileJS)
: settings.pathToConfigFileJS != null)
return false;
if (pathToConfigFileCpp != null ? !pathToConfigFileCpp.equals(settings.pathToConfigFileCpp)
: settings.pathToConfigFileCpp != null)
return false;
if (formatter != settings.formatter)
return false;
if (!pathToConfigFileJava.equals(settings.pathToConfigFileJava))
return false;
if (disabledFileTypes != null ? !disabledFileTypes.equals(settings.disabledFileTypes)
: settings.disabledFileTypes != null)
return false;
if (notifyFromTextLenght != null ? !notifyFromTextLenght.equals(settings.notifyFromTextLenght)
: settings.notifyFromTextLenght != null)
return false;
if (importOrder != null ? !importOrder.equals(settings.importOrder) : settings.importOrder != null)
return false;
if (importOrderConfigFilePath != null ? !importOrderConfigFilePath.equals(settings.importOrderConfigFilePath)
: settings.importOrderConfigFilePath != null)
return false;
if (selectedJavaProfile != null ? !selectedJavaProfile.equals(settings.selectedJavaProfile)
: settings.selectedJavaProfile != null)
return false;
if (selectedJavaScriptProfile != null ? !selectedJavaScriptProfile.equals(settings.selectedJavaScriptProfile)
: settings.selectedJavaScriptProfile != null)
return false;
if (selectedCppProfile != null ? !selectedCppProfile.equals(settings.selectedCppProfile)
: settings.selectedCppProfile != null)
return false;
if (eclipseVersion != settings.eclipseVersion)
return false;
if (importOrdering != settings.importOrdering)
return false;
return pathToEclipse != null ? pathToEclipse.equals(settings.pathToEclipse) : settings.pathToEclipse == null;
}
public boolean isImportOrderFromFile() {
return importOrderFromFile;
}
public void setDefaultSettings(boolean defaultSettings) {
this.defaultSettings = defaultSettings;
}
public void setImportOrderFromFile(boolean importOrderFromFile) {
this.importOrderFromFile = importOrderFromFile;
}
@Override
public boolean equals(Object o) {
if (this == o)
return true;
if (o == null || getClass() != o.getClass())
return false;
Settings settings = (Settings) o;
if (id != null ? !id.equals(settings.id) : settings.id != null)
return false;
return true;
}
@Override
public int hashCode() {
return id != null ? id.hashCode() : 0;
}
@Override
public String toString() {
final StringBuilder sb = new StringBuilder("Settings{");
sb.append("id=").append(id);
sb.append(", name='").append(name).append('\'');
sb.append('}');
return sb.toString();
}
}