package de.twenty11.skysail.server.ext.dbviewer;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.TypedQuery;
import org.restlet.resource.Delete;
import org.restlet.resource.Get;
import org.restlet.resource.ResourceException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import de.twenty11.skysail.common.ext.dbviewer.ConnectionDetails;
import de.twenty11.skysail.common.ext.dbviewer.RestfulConnection;
import de.twenty11.skysail.common.responses.FailureResponse;
import de.twenty11.skysail.common.responses.SkysailResponse;
import de.twenty11.skysail.server.ext.dbviewer.internal.DbViewerApplication;
import de.twenty11.skysail.server.restlet.ListServerResource;
public class ConnectionResource extends ListServerResource<ConnectionDetails> implements RestfulConnection {
private String connectionName;
private EntityManager em;
/** slf4j based logger implementation */
private static Logger logger = LoggerFactory.getLogger(ConnectionResource.class);
public ConnectionResource() {
setName("dbviewer connection resource");
setDescription("The resource describing a single connection");
}
@Override
protected void doInit() throws ResourceException {
connectionName = (String) getRequest().getAttributes().get(Constants.CONNECTION_NAME);
setName("dbviewer connection resource for " + connectionName);
em = ((DbViewerApplication) getApplication()).getEntityManager();
}
@Override
@Get("html|json")
public SkysailResponse<ConnectionDetails> getConnection() {
TypedQuery<ConnectionDetails> query = em.createQuery("SELECT c FROM ConnectionDetails c WHERE c.name = :name",
ConnectionDetails.class);
query.setParameter("name", connectionName);
List<ConnectionDetails> resultList = query.getResultList();
if (resultList.size() == 0) {
return new FailureResponse<ConnectionDetails>("could not find connection for name '" + connectionName +"'");
}
return getEntity(resultList.get(0));
}
// @Override
// @Put
// public SkysailResponse<ConstraintViolations<ConnectionDetails>> updateConnection(ConnectionDetails connection) {
// // TODO Auto-generated method stub
// return null;
// }
@Override
@Delete
public SkysailResponse<String> deleteConnection() {
SkysailResponse<ConnectionDetails> connectionResponse = getConnection();
return deleteEntity(em, connectionResponse.getData());
}
}