/** * File ./src/main/java/de/lemo/dms/service/ServiceConnectorManager.java * Lemo-Data-Management-Server for learning analytics. * Copyright (C) 2013 * Leonard Kappe, Andreas Pursian, Sebastian Schwarzrock, Boris Wenzlaff * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. **/ /** * File ./main/java/de/lemo/dms/service/ServiceGetConnectorState.java * Date 2013-01-24 * Project Lemo Learning Analytics */ package de.lemo.dms.service; import java.util.List; import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import org.apache.log4j.Logger; import org.codehaus.jettison.json.JSONException; import com.google.common.collect.Lists; import de.lemo.dms.connectors.ConnectorManager; import de.lemo.dms.connectors.EConnectorManagerState; import de.lemo.dms.connectors.IConnector; import de.lemo.dms.service.responses.ResourceNotFoundException; import de.lemo.dms.service.servicecontainer.SCConnector; import de.lemo.dms.service.servicecontainer.SCConnectorManagerState; import de.lemo.dms.service.servicecontainer.SCConnectors; /** * Return the state of the connector update process. * * @see EConnectorManagerState * @author Boris Wenzlaff * @author Leonard Kappe */ @Path("/connectors") public class ServiceConnectorManager { private final Logger logger = Logger.getLogger(this.getClass()); @GET @Produces(MediaType.APPLICATION_JSON) public SCConnectors connectorListJson() { final SCConnectors rs = new SCConnectors(); rs.setConnectors(this.getConnectors()); return rs; } @GET @Produces(MediaType.TEXT_HTML) public String connectorListHtml() { final StringBuilder result = new StringBuilder(); result.append("<html><title>Available Connectors</title><body><h2>Available Connectors</h2><ul>"); for (final SCConnector s : this.getConnectors()) { result.append("<li>").append(s.toString()).append("</li>"); } result.append("</ul></body></html>"); return result.toString(); } @GET @Path("/state") @Produces(MediaType.APPLICATION_JSON) public SCConnectorManagerState state() { ConnectorManager manager = ConnectorManager.getInstance(); SCConnector updatingConnector = null; if (manager.getUpdatingConnector() != null) { updatingConnector = new SCConnector(manager.getUpdatingConnector()); } EConnectorManagerState state = manager.connectorState(); logger.debug("Connector state: " + state); return new SCConnectorManagerState(state, updatingConnector); } /** * @param connectorId * the connector to update, provided in the paths * @return a JSON object containing the state of the update process. * @throws JSONException */ @POST @Path("/update/{id}") @Produces(MediaType.APPLICATION_JSON) public Boolean update(@PathParam("id") final Long connectorId) { final ConnectorManager manager = ConnectorManager.getInstance(); final IConnector connector = manager.getConnectorById(connectorId); if (connector == null) { throw new ResourceNotFoundException("No connector with id '" + connectorId + "' found"); } final boolean updating = manager.startUpdateData(connector); logger.info("Connector " + connector + ", update started: " + updating); return updating; } private List<SCConnector> getConnectors() { final List<SCConnector> result = Lists.newArrayList(); for (final IConnector connector : ConnectorManager.getInstance().getAvailableConnectors()) { result.add(new SCConnector(connector)); } return result; } }