package krasa.grepconsole.model;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.util.xmlb.annotations.Transient;
import org.apache.commons.lang.math.NumberUtils;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
import java.util.List;
public class Profile extends DomainObject {
public static final String DEFAULT = "120";
private static final String MAX_PROCESSING_TIME_DEFAULT = "1000";
private String maxLengthToMatch = DEFAULT;
private long id;
private boolean defaultProfile;
private List<GrepExpressionGroup> grepExpressionGroups = new ArrayList<>();
@Deprecated
private List<GrepExpressionItem> grepExpressionItems = new ArrayList<>();
private boolean enabledHighlighting = true;
private boolean enabledInputFiltering = true;
private boolean enableMaxLengthLimit = true;
@Transient
private transient Integer maxLengthToMatchAsInt;
private boolean multiLineOutput;
private boolean showStatsInConsoleByDefault;
private boolean showStatsInStatusBarByDefault;
private boolean enableFoldings;
private String maxProcessingTime = MAX_PROCESSING_TIME_DEFAULT;
@Transient
private transient Integer maxProcessingTimeAsInt;
private boolean synchronous;
private boolean filterOutBeforeGrep;
// for higlighting, it always ends with \n, but for input filtering it does not
@NotNull
public String limitInputLength_andCutNewLine(@NotNull String text) {
int endIndex = text.length();
if (text.endsWith("\n")) {
--endIndex;
}
if (this.isEnableMaxLengthLimit()) {
endIndex = Math.min(endIndex, this.getMaxLengthToMatchAsInt());
}
return text.substring(0, endIndex);
}
@NotNull
public CharSequence limitProcessingTime(String substring) {
return StringUtil.newBombedCharSequence(substring, this.getMaxProcessingTimeAsInt());
}
public Profile() {
id = System.currentTimeMillis();
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public boolean isDefaultProfile() {
return defaultProfile;
}
public void setDefaultProfile(boolean defaultProfile) {
this.defaultProfile = defaultProfile;
}
public List<GrepExpressionItem> getAllGrepExpressionItems() {
List<GrepExpressionItem> items = new ArrayList<>();
for (GrepExpressionGroup group : grepExpressionGroups) {
items.addAll(group.getGrepExpressionItems());
}
return items;
}
@Deprecated
public List<GrepExpressionItem> getGrepExpressionItems() {
return grepExpressionItems;
}
@Deprecated
public void setGrepExpressionItems(List<GrepExpressionItem> grepExpressionItems) {
this.grepExpressionItems = grepExpressionItems;
}
public List<GrepExpressionGroup> getGrepExpressionGroups() {
if (grepExpressionGroups.isEmpty() && grepExpressionItems != null && !grepExpressionItems.isEmpty()) {
GrepExpressionGroup expressionGroup = new GrepExpressionGroup("default");
expressionGroup.getGrepExpressionItems().addAll(grepExpressionItems);
grepExpressionItems.clear();
grepExpressionGroups.add(expressionGroup);
}
return grepExpressionGroups;
}
public void setGrepExpressionGroups(List<GrepExpressionGroup> grepExpressionGroups) {
this.grepExpressionGroups = grepExpressionGroups;
}
public boolean isEnabledHighlighting() {
return enabledHighlighting;
}
public void setEnabledHighlighting(final boolean enabledHighlighting) {
this.enabledHighlighting = enabledHighlighting;
}
public Integer getMaxLengthToMatchAsInt() {
if (maxLengthToMatchAsInt == null) {
maxLengthToMatchAsInt = Integer.valueOf(maxLengthToMatch);
}
return maxLengthToMatchAsInt;
}
public Integer getMaxProcessingTimeAsInt() {
if (maxProcessingTimeAsInt == null) {
maxProcessingTimeAsInt = Integer.valueOf(maxProcessingTime);
}
return maxProcessingTimeAsInt;
}
public String getMaxLengthToMatch() {
return maxLengthToMatch;
}
public void setMaxLengthToMatch(String maxLengthToMatch) {
if (maxLengthToMatch == null || maxLengthToMatch.length() == 0) {
maxLengthToMatch = DEFAULT;
}
maxLengthToMatch = normalize(maxLengthToMatch);
if (maxLengthToMatch.length() == 0 || !NumberUtils.isNumber(maxLengthToMatch)) {
maxLengthToMatch = DEFAULT;
}
this.maxLengthToMatch = maxLengthToMatch;
maxLengthToMatchAsInt = Integer.valueOf(maxLengthToMatch);
}
public boolean isEnableMaxLengthLimit() {
return enableMaxLengthLimit;
}
public void setEnableMaxLengthLimit(final boolean enableMaxLengthLimit) {
this.enableMaxLengthLimit = enableMaxLengthLimit;
}
public boolean isEnabledInputFiltering() {
return enabledInputFiltering;
}
public void setEnabledInputFiltering(boolean enabledInputFiltering) {
this.enabledInputFiltering = enabledInputFiltering;
}
public boolean isMultiLineOutput() {
return multiLineOutput;
}
public void setMultiLineOutput(boolean multiLineOutput) {
this.multiLineOutput = multiLineOutput;
}
public boolean isShowStatsInStatusBarByDefault() {
return showStatsInStatusBarByDefault;
}
public void setShowStatsInStatusBarByDefault(boolean showStatsInStatusBarByDefault) {
this.showStatsInStatusBarByDefault = showStatsInStatusBarByDefault;
}
public boolean isShowStatsInConsoleByDefault() {
return showStatsInConsoleByDefault;
}
public void setShowStatsInConsoleByDefault(boolean showStatsInConsoleByDefault) {
this.showStatsInConsoleByDefault = showStatsInConsoleByDefault;
}
public boolean isEnableFoldings() {
return enableFoldings;
}
public void setEnableFoldings(final boolean enableFoldings) {
this.enableFoldings = enableFoldings;
}
public String getMaxProcessingTime() {
return maxProcessingTime;
}
public void setMaxProcessingTime(String maxProcessingTime) {
if (maxProcessingTime == null || maxProcessingTime.length() == 0) {
maxProcessingTime = MAX_PROCESSING_TIME_DEFAULT;
}
maxProcessingTime = normalize(maxProcessingTime);
if (maxProcessingTime.length() == 0 || !NumberUtils.isNumber(maxProcessingTime)) {
maxProcessingTime = MAX_PROCESSING_TIME_DEFAULT;
}
this.maxProcessingTime = maxProcessingTime;
maxProcessingTimeAsInt = Integer.valueOf(maxProcessingTime);
}
protected String normalize(String s) {
return s.trim().replaceAll("[\u00A0 ,.]", "");
}
public boolean isSynchronous() {
return synchronous;
}
public void setSynchronous(final boolean synchronous) {
this.synchronous = synchronous;
}
public boolean isFilterOutBeforeGrep() {
return filterOutBeforeGrep;
}
public void setFilterOutBeforeGrep(final boolean filterOutBeforeGrep) {
this.filterOutBeforeGrep = filterOutBeforeGrep;
}
}