package org.araqne.logdb; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import org.araqne.api.CollectionTypeHint; import org.araqne.api.FieldOption; import org.araqne.confdb.CollectionName; import org.araqne.msgbus.Marshalable; import org.araqne.msgbus.Marshaler; @CollectionName("procedures") public class Procedure implements Marshalable { @FieldOption(nullable = false) private String name; @FieldOption(nullable = true) private String description; @FieldOption(nullable = false) private String owner; @CollectionTypeHint(String.class) private Set<String> grants = new HashSet<String>(); /** * @since 2.6.34 */ @CollectionTypeHint(String.class) private Set<String> grantGroups = new HashSet<String>(); @CollectionTypeHint(ProcedureParameter.class) private List<ProcedureParameter> parameters = new ArrayList<ProcedureParameter>(); @FieldOption(nullable = false) private String queryString; @FieldOption(nullable = false) private Date created = new Date(); @FieldOption(nullable = false) private Date modified = new Date(); public Procedure clone() { Procedure p = new Procedure(); p.setName(name); p.setDescription(description); p.setOwner(owner); p.setGrants(new HashSet<String>(grants)); p.setGrantGroups(new HashSet<String>(grantGroups)); List<ProcedureParameter> params = new ArrayList<ProcedureParameter>(); for (ProcedureParameter pp : parameters) params.add(pp.clone()); p.setParameters(params); p.setQueryString(queryString); p.setCreated(created); p.setModified(modified); return p; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public String getOwner() { return owner; } public void setOwner(String owner) { this.owner = owner; } public Set<String> getGrants() { return grants; } public void setGrants(Set<String> grants) { if (grants == null) grants = new HashSet<String>(); this.grants = grants; } /** * @since 2.6.34 */ public Set<String> getGrantGroups() { return grantGroups; } /** * @since 2.6.34 */ public void setGrantGroups(Set<String> grantGroups) { if (grantGroups == null) grantGroups = new HashSet<String>(); this.grantGroups = grantGroups; } public List<ProcedureParameter> getParameters() { return parameters; } public void setParameters(List<ProcedureParameter> parameters) { this.parameters = parameters; } public String getQueryString() { return queryString; } public void setQueryString(String queryString) { this.queryString = queryString; } public Date getCreated() { return created; } public void setCreated(Date created) { this.created = created; } public Date getModified() { return modified; } public void setModified(Date modified) { this.modified = modified; } @Override public Map<String, Object> marshal() { Map<String, Object> m = new HashMap<String, Object>(); m.put("name", name); m.put("owner", owner); m.put("grants", grants); m.put("grant_groups", grantGroups); m.put("parameters", Marshaler.marshal(parameters)); m.put("query_string", queryString); m.put("created", created); m.put("modified", modified); m.put("description", description); return m; } @Override public String toString() { SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return "name=" + name + ", parameters=" + parameters + ", query=" + queryString + ", created=" + df.format(created) + ", modified=" + df.format(modified) + ", owner=" + owner + ", grants=" + grants + ", grant_groups=" + grantGroups; } }