package krasa.grepconsole.model;
import java.util.Collection;
import java.util.HashMap;
import java.util.LinkedList;
public class GrepExpressionRootFolder extends GrepExpressionFolder {
/**
* Map of styles (id/style).
*/
private HashMap<String, GrepStyle> styles;
/**
* Creates a new instance, generating a new ID.
*/
public GrepExpressionRootFolder() {
super();
styles = new HashMap<>();
}
public Collection<GrepStyle> getStyles() {
return styles.values();
}
/**
* Sets a new collection of styles. Style references of all items will be updated using their ID.
*
* @param styles New styles.
*/
public void setStyles(Collection<GrepStyle> styles) {
this.styles.clear();
for (GrepStyle style : styles) {
if (style == null) {
continue;
}
this.styles.put(style.getId(), style);
}
refreshStyles();
}
public GrepStyle getStyle(String id) {
return styles.get(id);
}
/**
* @see AbstractGrepModelElement#isDefaultEnabled()
*/
@Override
public boolean isDefaultEnabled() {
return true;
}
/**
* @see AbstractGrepModelElement#isDefaultFilter()
*/
@Override
public boolean isDefaultFilter() {
return true;
}
public void addStyle(GrepStyle style) {
styles.put(style.getId(), style);
}
public void removeStyle(GrepStyle style) {
styles.remove(style.getId());
}
/**
* Iterates through all child elements and adds all referenced styles that are not yet included in the styles map to
* the map.
* <p/>
* Call this after new elements with new styles have been added.
*/
public void addMissingStyles() {
LinkedList<AbstractGrepModelElement> queue = new LinkedList<>();
queue.add(this);
while (!queue.isEmpty()) {
AbstractGrepModelElement element = queue.removeFirst();
if (element instanceof GrepExpressionFolder) {
queue.addAll(((GrepExpressionFolder) element).getChildren());
} else if (element instanceof GrepExpressionItem) {
GrepExpressionItem item = (GrepExpressionItem) element;
GrepStyle itemStyles = item.getStyle();
if (itemStyles == null) {
continue;
}
if (!styles.containsKey(itemStyles.getId())) {
styles.put(itemStyles.getId(), itemStyles);
}
}
}
}
}