package org.zend.webapi.test.server; import java.io.ByteArrayInputStream; import java.io.StringWriter; import javax.xml.transform.Result; import javax.xml.transform.Source; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import org.junit.Assert; import org.restlet.Application; import org.restlet.Request; import org.restlet.Response; import org.restlet.Restlet; import org.restlet.data.Disposition; import org.restlet.data.MediaType; import org.restlet.ext.xml.DomRepresentation; import org.restlet.representation.InputRepresentation; import org.restlet.representation.Representation; import org.restlet.routing.Router; import org.w3c.dom.Document; import org.zend.webapi.core.connection.data.values.SystemEdition; import org.zend.webapi.test.server.response.FileResponse; import org.zend.webapi.test.server.response.ServerResponse; import org.zend.webapi.test.server.response.ServiceResponse; public class ServerApplication extends Application { private String base; public ServerApplication(SystemEdition edition) { switch (edition) { case ZEND_SERVER_CLUSER_MANAGER: case ZEND_SERVER_COMMUNITY_EDITION: this.base = "/ZendServerManager/"; break; default: this.base = "/ZendServer/"; break; } } @Override public Restlet createInboundRoot() { return createRoot(); } public synchronized Restlet createRoot() { Router router = new Router(getContext()); Restlet getSystemInfo = new Restlet() { @Override public void handle(Request request, Response response) { ServerResponse serverResponse = ZendSystem.getInstance() .getSystemInfo(); prepareResponse(response, serverResponse); } }; Restlet clusterGetServerStatus = new Restlet() { @Override public void handle(Request request, Response response) { ServerResponse serverResponse = ZendSystem.getInstance() .clusterGetServerStatus(); prepareResponse(response, serverResponse); } }; Restlet clusterAddServer = new Restlet() { @Override public void handle(Request request, Response response) { String postParams = request.getEntityAsText(); Assert.assertNotNull(postParams); ServerResponse serverResponse = ZendSystem.getInstance() .clusterAddServer(); prepareResponse(response, serverResponse); } }; Restlet clusterRemoveServer = new Restlet() { @Override public void handle(Request request, Response response) { String postParams = request.getEntityAsText(); Assert.assertNotNull(postParams); ServerResponse serverResponse = ZendSystem.getInstance() .clusterRemoveServer(); prepareResponse(response, serverResponse); } }; Restlet clusterDisableServer = new Restlet() { @Override public void handle(Request request, Response response) { String postParams = request.getEntityAsText(); Assert.assertNotNull(postParams); ServerResponse serverResponse = ZendSystem.getInstance() .clusterDisableServer(); prepareResponse(response, serverResponse); } }; Restlet clusterEnableServer = new Restlet() { @Override public void handle(Request request, Response response) { String postParams = request.getEntityAsText(); Assert.assertNotNull(postParams); ServerResponse serverResponse = ZendSystem.getInstance() .clusterEnableServer(); prepareResponse(response, serverResponse); } }; Restlet restartPhp = new Restlet() { @Override public void handle(Request request, Response response) { ServerResponse serverResponse = ZendSystem.getInstance() .restartPhp(); prepareResponse(response, serverResponse); } }; Restlet configurationExport = new Restlet() { @Override public void handle(Request request, Response response) { FileResponse serverResponse = (FileResponse) ZendSystem .getInstance().configurationExport(); InputRepresentation representation = new InputRepresentation( new ByteArrayInputStream(serverResponse.getContent()), MediaType.valueOf("application/vnd.zend.serverconfig")); Disposition disposition = new Disposition( Disposition.TYPE_ATTACHMENT); disposition.setFilename(serverResponse.getFileName()); representation.setDisposition(disposition); representation.setSize(serverResponse.getFileSize()); response.setEntity(representation); response.setStatus(serverResponse.getStatus()); } }; Restlet configurationImport = new Restlet() { @Override public void handle(Request request, Response response) { final ServerResponse serverResponse = ZendSystem.getInstance() .configurationImport(); prepareResponse(response, serverResponse); } }; Restlet applicationGetStatus = new Restlet() { @Override public void handle(Request request, Response response) { ServerResponse serverResponse = ZendSystem.getInstance() .applicationGetStatus(); prepareResponse(response, serverResponse); } }; Restlet applicationDeploy = new Restlet() { @Override public void handle(Request request, Response response) { ServerResponse serverResponse = ZendSystem.getInstance() .applicationDeploy(); prepareResponse(response, serverResponse); } }; Restlet applicationUpdate = new Restlet() { @Override public void handle(Request request, Response response) { ServerResponse serverResponse = ZendSystem.getInstance() .applicationUpdate(); prepareResponse(response, serverResponse); } }; Restlet applicationRemove = new Restlet() { @Override public void handle(Request request, Response response) { ServerResponse serverResponse = ZendSystem.getInstance() .applicationRemove(); prepareResponse(response, serverResponse); } }; Restlet applicationRedeploy = new Restlet() { @Override public void handle(Request request, Response response) { ServerResponse serverResponse = ZendSystem.getInstance() .applicationRedeploy(); prepareResponse(response, serverResponse); } }; Restlet clusterReconfigureServer = new Restlet() { @Override public void handle(Request request, Response response) { ServerResponse serverResponse = ZendSystem.getInstance() .clusterReconfigureServer(); prepareResponse(response, serverResponse); } }; Restlet applicationRollback = new Restlet() { @Override public void handle(Request request, Response response) { ServerResponse serverResponse = ZendSystem.getInstance() .applicationRollback(); prepareResponse(response, serverResponse); } }; Restlet codeTracingDisable = new Restlet() { @Override public void handle(Request request, Response response) { ServerResponse serverResponse = ZendSystem.getInstance() .codeTracingDisable(); prepareResponse(response, serverResponse); } }; Restlet codeTracingEnable = new Restlet() { @Override public void handle(Request request, Response response) { ServerResponse serverResponse = ZendSystem.getInstance() .codeTracingEnable(); prepareResponse(response, serverResponse); } }; Restlet codeTracingIsEnabled = new Restlet() { @Override public void handle(Request request, Response response) { ServerResponse serverResponse = ZendSystem.getInstance() .codeTracingIsEnabled(); prepareResponse(response, serverResponse); } }; Restlet codeTracingCreate = new Restlet() { @Override public void handle(Request request, Response response) { ServerResponse serverResponse = ZendSystem.getInstance() .codeTracingCreate(); prepareResponse(response, serverResponse); } }; Restlet codeTracingList = new Restlet() { @Override public void handle(Request request, Response response) { ServerResponse serverResponse = ZendSystem.getInstance() .codeTracingList(); prepareResponse(response, serverResponse); } }; Restlet codeTracingDelete = new Restlet() { @Override public void handle(Request request, Response response) { ServerResponse serverResponse = ZendSystem.getInstance() .codeTracingDelete(); prepareResponse(response, serverResponse); } }; Restlet codetracingDownloadTraceFile = new Restlet() { @Override public void handle(Request request, Response response) { FileResponse serverResponse = (FileResponse) ZendSystem .getInstance().codetracingDownloadTraceFile(); InputRepresentation representation = new InputRepresentation( new ByteArrayInputStream(serverResponse.getContent()), MediaType.valueOf("application/vnd.zend.serverconfig")); Disposition disposition = new Disposition( Disposition.TYPE_ATTACHMENT); disposition.setFilename(serverResponse.getFileName()); representation.setDisposition(disposition); representation.setSize(serverResponse.getFileSize()); response.setEntity(representation); response.setStatus(serverResponse.getStatus()); } }; Restlet monitorGetRequestSummary = new Restlet() { @Override public void handle(Request request, Response response) { ServerResponse serverResponse = ZendSystem.getInstance() .monitorGetRequestSummary(); prepareResponse(response, serverResponse); } }; Restlet monitorGetIssuesListPredefinedFilter = new Restlet() { @Override public void handle(Request request, Response response) { ServerResponse serverResponse = ZendSystem.getInstance() .monitorGetIssuesListByPredefinedFilter(); prepareResponse(response, serverResponse); } }; Restlet monitorGetIssueDetails = new Restlet() { @Override public void handle(Request request, Response response) { ServerResponse serverResponse = ZendSystem.getInstance() .monitorGetIssueDetails(); prepareResponse(response, serverResponse); } }; Restlet monitorGetEventGroupDetails = new Restlet() { @Override public void handle(Request request, Response response) { ServerResponse serverResponse = ZendSystem.getInstance() .monitorGetEventGroupDetails(); prepareResponse(response, serverResponse); } }; Restlet monitorExportIssueByEventsGroup = new Restlet() { @Override public void handle(Request request, Response response) { FileResponse serverResponse = (FileResponse) ZendSystem .getInstance().monitorExportIssueByEventsGroup(); InputRepresentation representation = new InputRepresentation( new ByteArrayInputStream(serverResponse.getContent()), MediaType.valueOf("application/vnd.zend.eventexport")); Disposition disposition = new Disposition( Disposition.TYPE_ATTACHMENT); disposition.setFilename(serverResponse.getFileName()); representation.setDisposition(disposition); representation.setSize(serverResponse.getFileSize()); response.setEntity(representation); response.setStatus(serverResponse.getStatus()); } }; Restlet monitorChangeIssueStatus = new Restlet() { @Override public void handle(Request request, Response response) { ServerResponse serverResponse = ZendSystem.getInstance() .monitorChangeIssueStatus(); prepareResponse(response, serverResponse); } }; Restlet studioStartDebug = new Restlet() { @Override public void handle(Request request, Response response) { ServerResponse serverResponse = ZendSystem.getInstance() .studioStartDebug(); prepareResponse(response, serverResponse); } }; Restlet studioStartProfile = new Restlet() { @Override public void handle(Request request, Response response) { ServerResponse serverResponse = ZendSystem.getInstance() .studioStartProfile(); prepareResponse(response, serverResponse); } }; Restlet libraryGetStatus = new Restlet() { @Override public void handle(Request request, Response response) { ServerResponse serverResponse = ZendSystem.getInstance() .libraryGetStatus(); prepareResponse(response, serverResponse); } }; Restlet libraryVersionGetStatus = new Restlet() { @Override public void handle(Request request, Response response) { ServerResponse serverResponse = ZendSystem.getInstance() .libraryVersionGetStatus(); prepareResponse(response, serverResponse); } }; Restlet libraryVersionDeploy = new Restlet() { @Override public void handle(Request request, Response response) { ServerResponse serverResponse = ZendSystem.getInstance() .libraryVersionDeploy(); prepareResponse(response, serverResponse); } }; Restlet librarySynchronize = new Restlet() { @Override public void handle(Request request, Response response) { ServerResponse serverResponse = ZendSystem.getInstance() .librarySynchronize(); prepareResponse(response, serverResponse); } }; Restlet downloadLibraryVersionFile = new Restlet() { @Override public void handle(Request request, Response response) { FileResponse serverResponse = (FileResponse) ZendSystem .getInstance().downloadLibraryVersionFile(); InputRepresentation representation = new InputRepresentation( new ByteArrayInputStream(serverResponse.getContent()), MediaType.valueOf("application/vnd.zend.zpk")); Disposition disposition = new Disposition( Disposition.TYPE_ATTACHMENT); disposition.setFilename(serverResponse.getFileName()); representation.setDisposition(disposition); representation.setSize(serverResponse.getFileSize()); response.setEntity(representation); response.setStatus(serverResponse.getStatus()); } }; router.attach(base + "Api/getSystemInfo", getSystemInfo); router.attach(base + "Api/clusterGetServerStatus", clusterGetServerStatus); router.attach(base + "Api/clusterAddServer", clusterAddServer); router.attach(base + "Api/clusterRemoveServer", clusterRemoveServer); router.attach(base + "Api/clusterDisableServer", clusterDisableServer); router.attach(base + "Api/clusterEnableServer", clusterEnableServer); router.attach(base + "Api/clusterReconfigureServer", clusterReconfigureServer); router.attach(base + "Api/restartPhp", restartPhp); router.attach(base + "Api/configurationExport", configurationExport); router.attach(base + "Api/configurationImport", configurationImport); router.attach(base + "Api/applicationGetStatus", applicationGetStatus); router.attach(base + "Api/applicationDeploy", applicationDeploy); router.attach(base + "Api/applicationUpdate", applicationUpdate); router.attach(base + "Api/applicationRemove", applicationRemove); router.attach(base + "Api/applicationSynchronize", applicationRedeploy); router.attach(base + "Api/applicationRollback", applicationRollback); router.attach(base + "Api/codetracingDisable", codeTracingDisable); router.attach(base + "Api/codetracingEnable", codeTracingEnable); router.attach(base + "Api/codetracingIsEnabled", codeTracingIsEnabled); router.attach(base + "Api/codetracingCreate", codeTracingCreate); router.attach(base + "Api/codetracingDelete", codeTracingDelete); router.attach(base + "Api/codetracingList", codeTracingList); router.attach(base + "Api/codetracingDownloadTraceFile", codetracingDownloadTraceFile); router.attach(base + "Api/monitorGetRequestSummary", monitorGetRequestSummary); router.attach(base + "Api/monitorGetIssuesListPredefinedFilter", monitorGetIssuesListPredefinedFilter); router.attach(base + "Api/monitorGetIssueDetails", monitorGetIssueDetails); router.attach(base + "Api/monitorGetEventGroupDetails", monitorGetEventGroupDetails); router.attach(base + "Api/monitorExportIssueByEventsGroup", monitorExportIssueByEventsGroup); router.attach(base + "Api/monitorChangeIssueStatus", monitorChangeIssueStatus); router.attach(base + "Api/studioStartDebug", studioStartDebug); router.attach(base + "Api/studioStartProfile", studioStartProfile); router.attach(base + "Api/libraryGetStatus", libraryGetStatus); router.attach(base + "Api/libraryVersionGetStatus", libraryVersionGetStatus); router.attach(base + "Api/libraryVersionDeploy", libraryVersionDeploy); router.attach(base + "Api/librarySynchronize", librarySynchronize); router.attach(base + "Api/downloadLibraryVersionFile", downloadLibraryVersionFile); return router; } private void prepareResponse(Response response, ServerResponse serverResponse) { Document doc = ((ServiceResponse) serverResponse).getData(); Representation representation = new DomRepresentation( MediaType.register("application/vnd.zend.serverapi", "version=1.1"), doc); TransformerFactory factory = TransformerFactory.newInstance(); try { Transformer xform = factory.newTransformer(); Source src = new DOMSource(doc); StringWriter writer = new StringWriter(); Result result = new javax.xml.transform.stream.StreamResult(writer); xform.transform(src, result); representation.setSize(writer.toString().length()); } catch (TransformerConfigurationException e) { // ignore } catch (TransformerException e) { // ignore } response.setEntity(representation); response.setStatus(serverResponse.getStatus()); } }