base.jee.api.cassandra.CreateTemplate Maven / Gradle / Ivy
/**
* Creative commons Attribution-NonCommercial license.
*
* http://creativecommons.org/licenses/by-nc/2.5/au/deed.en_GB
*
* NO WARRANTY IS GIVEN OR IMPLIED, USE AT YOUR OWN RISK.
*/
package base.jee.api.cassandra;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.util.LinkedList;
import java.util.List;
import base.Command;
import base.jee.Constants;
import base.json.Json;
import base.security.ResourceUid;
import base.security.User;
import base.template.Resource;
import com.datastax.driver.core.PreparedStatement;
import com.datastax.driver.core.ResultSet;
import com.datastax.driver.core.Row;
import com.datastax.driver.core.Session;
import static base.jee.api.cassandra.util.Log.log;
public class CreateTemplate extends Command {
private CassandraAPI c;
private User user;
private String basedOn;
private String name;
public CreateTemplate(CassandraAPI c, User user, String basedOn, String name) {
this.c = c;
this.name = name;
this.user = user;
this.basedOn = basedOn;
if(c == null) {
throw new IllegalArgumentException("Invalid parameter: c");
}
if(user == null || !user.isAuthenticated()) {
throw new IllegalArgumentException("Invalid parameter: user");
}
if(name == null || name.length() == 0) {
throw new IllegalArgumentException("Invalid parameter: name");
}
if(name.equalsIgnoreCase("default")) {
throw new IllegalArgumentException("A template already exists with this name.");
}
if(basedOn == null || basedOn.length() == 0) {
throw new IllegalArgumentException("Invalid parameter: basedOn");
}
if(name.contains(" ")) {
throw new IllegalArgumentException("template name must not contain whitespace");
}
}
@Override
protected void execute() throws IOException {
Session s = c.getCassandraSession();
if(!user.hasRole(Constants.TEMPLATE_MANAGE_ROLE)) {
log(s, "WARN", user, "Permission denied invoking: " + CreateTemplate.class.getSimpleName() + " " + getJsonParameters());
throw new IllegalStateException("You do not have permission to manage templates.");
}
// Check template name does not already exist
PreparedStatement p = s.prepare("select name from template where name=?");
ResultSet r = s.execute(p.bind(name));
if(r.iterator().hasNext()) {
throw new IllegalArgumentException("A template already exists with this name.");
}
List resources = new LinkedList<>();
if(!basedOn.equalsIgnoreCase("default")) {
p = s.prepare("select name from template where name=?");
r = s.execute(p.bind(basedOn));
if(!r.iterator().hasNext()) {
throw new IllegalArgumentException("Based on template name is not a template.");
}
PreparedStatement q = s.prepare("select resource, content, isbinary from template_resource where template=?");
for(Row row : s.execute(q.bind(basedOn))) {
Resource i = new Resource(row.getString(0), row.getBytes(1).array(), row.getBool(2));
resources.add(i);
}
}
// Persist the template details
p = s.prepare("insert into template (name) values(?)");
s.execute(p.bind(name));
p = s.prepare("insert into template_resource (template, resource, content, isbinary) values(?,?,?,?)");
for(Resource i : resources) {
s.execute(p.bind(name, i.getName(), ByteBuffer.wrap(i.getData()), i.isBinary()));
}
log(s, "INFO", user, "Created new template: " + name + " based on " + basedOn, new ResourceUid("Template", name));
}
@Override
public String getJsonParameters() {
return "{" +
"\"name\":\"" + Json.escape(name)+ "\"," +
"\"based_on\":\"" + Json.escape(basedOn)+ "\"" +
"}";
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy