package edu.isi.karma.controller.command.selection; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import edu.isi.karma.rep.Row; import edu.isi.karma.rep.Workspace; public abstract class Selection { public enum SelectionStatus { UP_TO_DATE, OUT_OF_DATE } public enum RowStatus { SELECTED, OUT_OF_DATE, NOT_SELECTED } public enum Tag { IGNORE_IN_PUBLISH_RDF, IGNORE_IN_JSON_EXPORT, IGNORE_IN_SERVICE_INVOCATION, IGNORE_IN_WORKSHEET_TRANSFORMATION } protected SelectionStatus status; protected Workspace workspace; protected String worksheetId; protected List<Tag> tags = new ArrayList<>(); protected String hTableId; protected String Id; protected Map<Row, Boolean> selectedRowsCache; protected Set<String> evalColumns; protected Set<String> selectedRowsColumns; protected String superSelectionName; protected boolean hasSelectedRowsMethod; Selection(Workspace workspace, String worksheetId, String hTableId, String name, String superSelectionName) { this.worksheetId = worksheetId; this.workspace = workspace; this.hTableId = hTableId; this.Id = name; this.status = SelectionStatus.UP_TO_DATE; this.superSelectionName = superSelectionName; if(this.superSelectionName == null) { this.superSelectionName = ""; } selectedRowsCache = new HashMap<>(); evalColumns = new HashSet<>(); selectedRowsColumns = new HashSet<>(); hasSelectedRowsMethod = false; } public void setTags(List<Tag> tags) { this.tags.clear(); this.tags.addAll(tags); } public String getHTableId() { return hTableId; } public String getId() { return Id; } public void invalidateSelection() { this.status = SelectionStatus.OUT_OF_DATE; } public SelectionStatus getStatus() { return status; } public List<Tag> getTags() { return tags; } public Map<Row, Boolean> getCache() { return selectedRowsCache; } public boolean isSelected(Row row) { Boolean prop = selectedRowsCache.get(row); if (prop == null) prop = false; return prop; } public RowStatus getSelectedStatus(Row row) { if (!row.getBelongsToTable().getHTableId().equals(hTableId)) return RowStatus.NOT_SELECTED; if (this.status == SelectionStatus.OUT_OF_DATE) return RowStatus.OUT_OF_DATE; Boolean prop = selectedRowsCache.get(row); if (prop == null) prop = false; return prop ? RowStatus.SELECTED : RowStatus.NOT_SELECTED; } public abstract void updateSelection(); public Set<String> getInputColumns() { return new HashSet<>(evalColumns); } public Set<String> getSelectedRowsColumns() { return new HashSet<>(selectedRowsColumns); } public String getParentSuperSelection() { return superSelectionName; } public void addSelectedRowsColumns(String hNodeId) { selectedRowsColumns.add(hNodeId); } public void setSelectedRowsMethod(boolean t) { hasSelectedRowsMethod = t; } public boolean isSelectedRowsMethod() { return hasSelectedRowsMethod; } }