package de.twenty11.skysail.server.ext.dbviewer;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.EntityManager;
import org.restlet.resource.Get;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import de.twenty11.skysail.common.ext.dbviewer.ConnectionDetails;
import de.twenty11.skysail.common.responses.SkysailResponse;
import de.twenty11.skysail.server.ext.dbviewer.internal.DbViewerApplication;
import de.twenty11.skysail.server.ext.dbviewer.links.ConnectionPage;
import de.twenty11.skysail.server.restlet.ListServerResource;
/**
* Restlet Resource class for handling Connections.
*
* Provides a method to retrieve the existing connections and to add a new one.
*
* The managed entity is of type {@link ConnectionDetails}, providing details (like jdbc url, username and password
* about what is needed to actually connect to a datasource.
*
*/
public class ConnectionsResource extends ListServerResource<ConnectionDetails> {
/** slf4j based logger implementation */
private static Logger logger = LoggerFactory.getLogger(ConnectionsResource.class);
public ConnectionsResource() {
setName("dbviewer connections resource");
setDescription("The resource containing the list of connections");
}
// @Override
@Get("html|json")
public SkysailResponse<List<ConnectionDetails>> getConnections() {
registerLinkedPage(new ConnectionPage());
List<ConnectionDetails> allConnections = allConnections();
return getEntities(allConnections, augmentWithFilterMsg("all Connections (" + allConnections.size() + ")"));
}
@SuppressWarnings("unchecked")
private List<ConnectionDetails> allConnections() {
EntityManager em = ((DbViewerApplication) getApplication()).getEntityManager();
List<ConnectionDetails> resultList = em.createQuery("SELECT c FROM ConnectionDetails c").getResultList();
List<ConnectionDetails> filteredResults = new ArrayList<ConnectionDetails>();
for (ConnectionDetails details : resultList) {
if (filterMatches(details)) {
filteredResults.add(details);
}
}
return filteredResults;
}
@Override
protected boolean match(ConnectionDetails object, String pattern) {
return object.getName().contains(pattern);
}
// @Override
// @Post("html")
// public SkysailResponse<ConstraintViolations<ConnectionDetails>> addConnection(ConnectionDetails entity) {
// logger.info("trying to persist connection {}", entity);
// EntityManager em = ((DbViewerApplication) getApplication()).getEntityManager();
// Set<ConstraintViolation<ConnectionDetails>> constraintViolations = getValidator().validate(entity);
// ConstraintViolations<ConnectionDetails> violations = new ConstraintViolations<ConnectionDetails>(
// constraintViolations);
// // return addEntity(em, entity, violations);
//
// return null;// TO BE DONE
// }
}