package org.goko.tools.serial.jssc.preferences.connection;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang3.StringUtils;
import org.eclipse.jface.preference.IPreferenceStore;
import org.goko.core.config.GkPreference;
import org.goko.core.log.GkLog;
import org.goko.tools.serial.jssc.console.internal.JsscConsoleFilter;
import org.goko.tools.serial.jssc.console.internal.JsscConsoleFilterType;
import com.eclipsesource.json.JsonArray;
import com.eclipsesource.json.JsonObject;
public class SerialConnectionPreference extends GkPreference {
private static final GkLog LOG = GkLog.getLogger(SerialConnectionPreference.class);
/** Node name */
public static final String PREFERENCE_NODE = "org.goko.tools.serial.jssc";
/** Key for console preferences - Filters */
public static final String KEY_FILTERS = "console.filters";
private static SerialConnectionPreference _instance;
public SerialConnectionPreference() {
super(PREFERENCE_NODE);
}
/**
* Returns the Preference Store
*
* @return {@link IPreferenceStore}
*/
public static SerialConnectionPreference getInstance() {
if (_instance == null) {
_instance = new SerialConnectionPreference();
}
return _instance;
}
public void setFilters(List<JsscConsoleFilter> lstFilters) {
JsonArray filters = new JsonArray();
for (JsscConsoleFilter filter : lstFilters) {
filters.add(new JsonObject().add("description", filter.getDescription())
.add("pattern", filter.getRegex())
.add("enabled", filter.isEnabled())
.add("type", filter.getType().getValue()));
}
setValue(KEY_FILTERS, filters.toString());
}
public List<JsscConsoleFilter> getFilters() {
List<JsscConsoleFilter> result = new ArrayList<JsscConsoleFilter>();
String filters = getString(KEY_FILTERS);
if (StringUtils.isNotBlank(filters)) {
JsonArray filtersArray = JsonArray.readFrom(filters);
for(int i = 0; i < filtersArray.size(); i++){
JsonObject jsonFilter = filtersArray.get(i).asObject();
result.add(new JsscConsoleFilter(jsonFilter.get("enabled").asBoolean(),
jsonFilter.get("pattern").asString(),
jsonFilter.get("description").asString(),
JsscConsoleFilterType.get( jsonFilter.get("type").asInt()) ));
}
}
return result;
}
}