package klik.server.handler; import gnu.io.CommPortIdentifier; import java.util.Enumeration; import java.util.LinkedHashMap; import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import klik.server.Process; import klik.server.PropertiesManager; import klik.shared.rpc.RetrieveSetupAction; import klik.shared.rpc.RetrieveSetupResult; import org.apache.commons.logging.Log; import com.google.inject.Inject; import com.google.inject.Provider; import com.gwtplatform.dispatch.server.ExecutionContext; import com.gwtplatform.dispatch.server.actionhandler.ActionHandler; import com.gwtplatform.dispatch.shared.ActionException; public class RetrieveSetupHandler implements ActionHandler<RetrieveSetupAction, RetrieveSetupResult> { private final Log logger; @Inject public RetrieveSetupHandler(final Log logger, final Provider<ServletContext> servletContext, final Provider<HttpServletRequest> servletRequest) { this.logger = logger; } @Override public RetrieveSetupResult execute(final RetrieveSetupAction action, final ExecutionContext context) throws ActionException { try { @SuppressWarnings("rawtypes") Enumeration en = CommPortIdentifier.getPortIdentifiers(); LinkedHashMap<String, String> ports = new LinkedHashMap<String, String>(); ports.put("Choose...", ""); for (; en.hasMoreElements();) { CommPortIdentifier portId = ((CommPortIdentifier) en.nextElement()); if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) { String name = portId.getName(); logger.debug(" port:"+name); ports.put(name, name); } } String activePort = PropertiesManager.getProperty("cm11.port"); return new RetrieveSetupResult(Process.isRunning(), ports, activePort); } catch (Exception cause) { logger.error("Unable to send response", cause); throw new ActionException(cause); } } @Override public void undo(RetrieveSetupAction action, RetrieveSetupResult result, ExecutionContext context) throws ActionException { // Nothing to do here } @Override public Class<RetrieveSetupAction> getActionType() { return RetrieveSetupAction.class; } }