package org.ngbw.web.actions; import java.util.Date; import javax.ws.rs.client.ClientBuilder; import javax.ws.rs.client.Invocation; import javax.ws.rs.core.Response; import org.apache.log4j.Logger; import org.ngbw.cipres.sdk.api.foldershare.command.ListDirectoryContent; import org.ngbw.cipres.sdk.api.foldershare.resource.ApiKeyAuthenticator; import org.ngbw.cipres.sdk.api.foldershare.resource.Authenticator; import org.ngbw.cipres.sdk.api.foldershare.resource.Host; import org.ngbw.cipres.sdk.api.xsede.XsedeApiResponse; import org.ngbw.cipres.sdk.api.xsede.resource.ListSubmittedGatweayAttributes; import org.ngbw.cipres.sdk.api.xsede.resource.ListXsedeResources; import org.ngbw.cipres.sdk.api.xsede.resource.SubmitGatewayAttribute; import org.ngbw.cipres.sdk.api.xsede.resource.XsedeResource; import org.ngbw.sdk.Workbench; import org.ngbw.sdk.common.util.CipresTaskThread; import org.ngbw.sdk.common.util.FileUtils; import org.ngbw.sdk.core.types.DataFormat; import org.ngbw.sdk.core.types.DataType; import org.ngbw.sdk.core.types.EntityType; import org.ngbw.sdk.database.CipresDataParsingScheduler; import org.ngbw.sdk.database.CipresDataParsingScheduler.CipresDataParsingSchedule; import org.ngbw.sdk.database.UserDataItem; import org.ngbw.sdk.database.XsedeAttributeReportingScheduler; import org.ngbw.sdk.database.XsedeAttributeReportingScheduler.XsedeAttributeReportingSchedule; import org.ngbw.sdk.parser.task.DataFormatInspectorTask; import org.ngbw.sdk.parser.task.DataParserTask; /** * Struts action class for administration related tasks in the NGBW web * application. * * @author Tony Chen * @author Jennifer Zhuang */ @SuppressWarnings("serial") public class FunctionsTester extends SessionManager { private static final Logger logger = Logger.getLogger(FunctionsTester.class); private Long dataItemId = null; private String userName = null; // private String actionResult = null; private UserDataItem userDataItem = null; private Integer responseCode = null; private String responseMessage = null; private String responseContent = null; public String listFunc () { logger.debug("BEGIN: listFunc()::String"); String retVal = LIST; logger.debug(String.format("RetVal=[%s]", retVal)); logger.debug("END: listFunc()::String"); return retVal; } public Long getDataItemId () { return dataItemId; } public void setDataItemId ( Long id ) { this.dataItemId = id; } public void setUserName ( String username ) { this.userName = username; } public String getUserName () { return userName; } // public String getActionResult () // { // return actionResult; // } // public void setActionResult ( String result ) // { // this.actionResult = result; // } public UserDataItem getUserDataItem () { return userDataItem; } public void setUserDataItem ( UserDataItem udi ) { this.userDataItem = udi; } public Integer getResponseCode () { return responseCode; } public void setResponseCode ( Integer code ) { this.responseCode = code; } public String getResponseMessage () { return responseMessage; } public void setResponseMessage ( String message ) { this.responseMessage = message; } public String getResponseContent () { return responseContent; } public void setResponseContent ( String content ) { this.responseContent = content; } @Override public String execute () { logger.debug("BEGIN: execute()::String"); String retVal = LIST; logger.debug(String.format("RetVal=[%s]", retVal)); logger.debug("END: execute()::String"); return retVal; } public String getJobs () throws Throwable { logger.debug("BEGIN: getJobs()::String"); String retVal = "userJobs"; logger.debug("END: getJobs()::String"); return retVal; } public String listCipresShareContent () throws Throwable { logger.info("BEGIN: listCipresShareContent()::String"); try { // if (getFilePath() != null && !getFilePath().trim().isEmpty()) { // logger.debug(String.format("Directory to check=[%s]", getFilePath())); final String executorPath = Workbench.getInstance().getSeedMe2FoldershareDir(); final String executorName = Workbench.getInstance().getSeedMe2FoldershareName(); final Host seedmeHost = new Host(Workbench.getInstance().getCipresShareHostname()); final Authenticator authenticator = new ApiKeyAuthenticator(Workbench.getInstance().getCipresShareApiKey()) .setMasqueradeUsername(this.getAuthenticatedUser().getUsername()); ListDirectoryContent listDirContent = new ListDirectoryContent( executorPath, executorName, seedmeHost, authenticator); // listDirContent.addDirectory(getFilePath()); listDirContent.execute(); logger.debug("ListDirectoryContent result:"); logger.debug(listDirContent.getResponse().getOutputMessages()); // setActionResult(listDirContent.getResponse().getOutputMessages()); } } catch ( Throwable t ) { logger.error(t.getMessage(), t); } logger.info("END: listCipresShareContent()::String"); return LIST; } public String deleteCipresShareItem () throws Throwable { logger.info("BEGIN: deleteCipresShareItem()::String"); try { // if (getFilePath() != null && !getFilePath().trim().isEmpty()) { // logger.debug(String.format("Directory to check=[%s]", getFilePath())); final String executorPath = Workbench.getInstance().getSeedMe2FoldershareDir(); final String executorName = Workbench.getInstance().getSeedMe2FoldershareName(); final Host seedmeHost = new Host(Workbench.getInstance().getCipresShareHostname()); final Authenticator authenticator = new ApiKeyAuthenticator(Workbench.getInstance().getCipresShareApiKey()) .setMasqueradeUsername(this.getAuthenticatedUser().getUsername()); // DirectoryDeleteService_WIP dirDeleteService = // new DirectoryDeleteService_WIP( // executorPath, // executorName, // seedmeHost, // authenticator); // //// dirDeleteService.addDirectory(getFilePath()); // dirDeleteService.execute(); // // logger.debug("DeleteDirectory result:"); // logger.debug(dirDeleteService.getMessages()); //// setActionResult(dirDeleteService.getMessages()); } } catch ( Throwable t ) { logger.error(t.getMessage(), t); } logger.info("END: deleteCipresShareItem()::String"); return LIST; } public String parseDataItem () throws Throwable { logger.info("BEGIN: parseDataItem()::String"); if (this.getDataItemId() == null) { super.addFieldError("dataItemId", "Data Item ID cannot be empty."); } else { try { userDataItem = new UserDataItem(getDataItemId()); DataParserTask task = new DataFormatInspectorTask(userDataItem); CipresTaskThread taskThread = new CipresTaskThread(task); taskThread.start(); logger.debug(String.format("CipresTaskThread UUID=[%s] started.", taskThread.getUUID())); // taskThread.join(); // userDataItem = new UserDataItem(userDataItem.getUserDataId()); // logger.debug("=================================================="); // DataInspector.inspect(userDataItem, Boolean.FALSE); // logger.debug("=================================================="); } catch ( Throwable t ) { logger.error(t.getMessage(), t); super.reportUserError("Error when retrieving UserDataItem: " + getDataItemId()); } } logger.info("END: parseDataItem()::String"); return LIST; } public String downloadDataItem () throws Throwable { logger.info("BEGIN: downloadDataItem()::String"); if (this.getDataItemId() == null) { super.addFieldError("dataItemId", "Data Item ID cannot be empty."); } else { try { userDataItem = new UserDataItem(getDataItemId()); super.getServletResponse().setContentType("application/octet-stream"); super.getServletResponse() .setHeader( "Content-Disposition", String.format("attachment;filename=\"%s\"", userDataItem.getLabel())); FileUtils.copy( userDataItem.getDataAsStream(), super.getServletResponse().getOutputStream()); } catch ( Throwable t ) { logger.error(t.getMessage(), t); super.reportUserError("Error when retrieving UserDataItem: " + getDataItemId()); } finally { this.dataItemId = null; } } logger.info("END: downloadDataItem()::String"); return LIST; } public String dataItemDetails () throws Throwable { logger.info("BEGIN: dataItemDetails()::String"); if (this.getDataItemId() == null) { super.addFieldError("dataItemId", "Data Item ID cannot be empty."); } else { try { userDataItem = new UserDataItem(getDataItemId()); logger.debug("UserDataItem: " + userDataItem.getUserDataId()); String json = userDataItem.toJSON(); logger.debug("UserDataItem details:\n" + json); this.responseContent = json; } catch ( Throwable t ) { logger.error(t.getMessage(), t); super.reportUserError("Error when retrieving UserDataItem: " + getDataItemId()); } finally { this.dataItemId = null; } } logger.info("END: dataItemDetails()::String"); return LIST; } public String parserTaskDetails () throws Throwable { logger.info("BEGIN: parserTaskDetails()::String"); if (this.getDataItemId() == null) { super.addFieldError("dataItemId", "Parser Task ID cannot be empty."); } else { try { CipresDataParsingSchedule parseSchedule = CipresDataParsingScheduler.getInstance().getSchedule(getDataItemId()); String json = (parseSchedule == null)? "" : parseSchedule.toJSON(); logger.debug("Data Parser Schedule details:\n" + json); this.responseContent = json; } catch ( Throwable t ) { logger.error(t.getMessage(), t); super.reportUserError("Error when retrieving parser task: " + getDataItemId()); } finally { this.dataItemId = null; } } logger.info("END: parserTaskDetails()::String"); return LIST; } public String listXsedeResources () throws Throwable { XsedeResource api = new ListXsedeResources( Workbench.getInstance() .getXsedeAttrReportingApiKey(null)); api.isDebug(true); XsedeApiResponse apiResponse = api.execute(); logger.debug("\n" + apiResponse.toString()); this.responseCode = apiResponse.getResponseCode(); this.responseMessage = apiResponse.getResponseMessage(); this.responseContent = apiResponse.getContent(); return LIST; } public String listXsedeSubmittedAttributes () throws Throwable { testEnums(); XsedeResource api = new ListSubmittedGatweayAttributes( Workbench.getInstance() .getXsedeAttrReportingApiKey(null)); api.isDebug(true); XsedeApiResponse apiResponse = api.execute(); logger.debug("\n" + apiResponse.toString()); this.responseCode = apiResponse.getResponseCode(); this.responseMessage = apiResponse.getResponseMessage(); this.responseContent = apiResponse.getContent(); return LIST; } public String submitXsedeAttribute () throws Throwable { SubmitGatewayAttribute api = new SubmitGatewayAttribute( Workbench.getInstance().getXsedeAttrReportingApiKey(null)); api.isDebug(true); api.setJobId("bogus"); api.setGatewayUser("jdoe@xyz.com"); api.setXsedeResourceName("comet-gpu.sdsc.xsede"); api.setSubmittedTime(new Date()); XsedeApiResponse apiResponse = api.execute(); logger.debug("\n" + apiResponse.toString()); this.responseCode = apiResponse.getResponseCode(); this.responseMessage = apiResponse.getResponseMessage(); this.responseContent = apiResponse.getContent(); return LIST; } public String xsedeReportDetails () throws Throwable { logger.info("BEGIN: xsedeReportDetails()::String"); if (this.getDataItemId() == null) { super.addFieldError("dataItemId", "XSEDE Report ID cannot be empty."); } else { try { XsedeAttributeReportingSchedule reportSchedule = XsedeAttributeReportingScheduler.getInstance().getSchedule(getDataItemId()); String json = (reportSchedule == null)? "" : reportSchedule.toJSON(); logger.debug("XSEDE Report Schedule details:\n" + json); this.responseContent = json; } catch ( Throwable t ) { logger.error(t.getMessage(), t); super.reportUserError("Error when retrieving XSEDE report: " + getDataItemId()); } finally { this.dataItemId = null; } } logger.info("END: xsedeReportDetails()::String"); return LIST; } private void testEnums () { String enm = "UNKNOWN"; logger.debug(String.format( "DataFormat.get(\"%s\") -> [%s]", "BEAST", DataFormat.get("BEAST").toString())); logger.debug(String.format( "DataFormat.equals(\"%s\") -> [%s]", "BEAST2", DataFormat.BEAST2.equals("BEAST2"))); logger.debug(String.format( "DataType.get(\"%s\") -> [%s]", "SEQUENCE", DataType.get("SEQUENCE").toString())); logger.debug(String.format( "DataType.equals(\"%s\") -> [%s]", "SEQUENCE", DataType.SEQUENCE.equals("SEQUENCE"))); logger.debug(String.format( "EntityType.get(\"%s\") -> [%s]", "AMINOACID", EntityType.get("AMINOACID").toString())); logger.debug(String.format( "EntityType.equals(\"%s\") -> [%s]", "NUCLEOTIDE", EntityType.NUCLEOTIDE.equals("NUCLEOTIDE"))); } public String provisionCipresShare () throws Throwable { try { final String url = Workbench.getInstance().getCipresShareUserProvisionURL() + getUserName().trim(); final javax.ws.rs.client.Client client = ClientBuilder.newClient(); final javax.ws.rs.client.WebTarget webTarget = client.target(url); final Invocation.Builder builder = webTarget.request(); final Response response = builder.get(); this.responseCode = response.getStatus(); this.responseMessage = response.getStatusInfo().getReasonPhrase(); this.responseContent = response.readEntity(String.class); logger.debug( "CIPRES Share User Provision: " + url + " -> " + responseCode + ", " + responseMessage); } catch ( Throwable t ) { logger.error(t.getMessage(), t); } return LIST; } }