/* * Copyright (c) 2006 Forschungszentrum Juelich GmbH * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * (1) Redistributions of source code must retain the above copyright notice, * this list of conditions and the disclaimer at the end. Redistributions in * binary form must reproduce the above copyright notice, this list of * conditions and the following disclaimer in the documentation and/or other * materials provided with the distribution. * * (2) Neither the name of Forschungszentrum Juelich GmbH nor the names of its * contributors may be used to endorse or promote products derived from this * software without specific prior written permission. * * DISCLAIMER * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * * UiComputeDiscover.java * * Created on February 26, 2007, 3:47 PM * * Copyright (c) 2006 Forschungszentrum Juelich GmbH * All rights reserved. */ package org.nextgrid.udap; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.MalformedURLException; import java.net.URL; import java.util.logging.Logger; import org.apache.xmlbeans.XmlOptions; import org.ggf.schemas.jsdl.x2005.x11.jsdl.CPUArchitectureType; import org.ggf.schemas.jsdl.x2005.x11.jsdl.JobDefinitionDocument; import org.ggf.schemas.jsdl.x2005.x11.jsdl.JobDefinitionType; import org.ggf.schemas.jsdl.x2005.x11.jsdl.JobDescriptionType; import org.ggf.schemas.jsdl.x2005.x11.jsdl.ProcessorArchitectureEnumeration; import org.ggf.schemas.jsdl.x2005.x11.jsdl.RangeValueType; import org.ggf.schemas.jsdl.x2005.x11.jsdl.ResourcesType; import org.nextgrid.udap.userclient.UserClient; import org.nextgrid.x2006.x05.udap.DescriptionType; import org.nextgrid.x2006.x05.udap.ResourceType; import org.nextgrid.x2006.x05.udap.UDAPRequestDocument; import org.nextgrid.x2006.x05.udap.UDAPRequestDocument.UDAPRequest; import org.nextgrid.x2006.x05.udap.UDAPResponseDocument; import org.nextgrid.x2006.x05.udap.impl.ResourceTypeEnumerationTypeImpl; /** * * @author Henning Mersch */ public class UiComputeDiscover { /** Creates a new instance of UiComputeDiscover */ public UiComputeDiscover() { } Logger logger = Logger.getLogger(UiComputeDiscover.class.getName()); private static final String DISPLAY_PAGE = "computediscover/computediscover.jsp"; private static final String UDAPCLIENT = "http://localhost:7777/services/UdapClient"; private String errorMessage = ""; private String emptyList = "--- No Matching Services ---"; private static final String IV_SERVICE_INSTALL_URI = "auto://42A6C1A0-B126-11DB-AC6F-C2B54450C558/home/autodeploy/gm_test.war"; private static final String PROXY_DN = "C=UK/O=eoveri.com/CN=UDAP Upload Request"; private static final String PORTAL_URI = "http://193.61.123.206:8080/DebutWS/services/PortalService"; public static void main(String[] args) throws Exception{ UiComputeDiscover d = new UiComputeDiscover(); JobDefinitionDocument j = JobDefinitionDocument.Factory.newInstance(); //JobDefinitionType jdt = d.formatQuery(j,"sparc","4","4","SunOS"); JobDefinitionType jdt = d.formatQuery(j,"powerpc","","",""); UDAPRequestDocument udap = UDAPRequestDocument.Factory.newInstance(); UDAPRequest ureq = udap.addNewUDAPRequest(); ureq.setId("programatic generated UDAP request ID"); ResourceType r = ureq.addNewResource(); r.setId("1st CR"); r.setType(ResourceTypeEnumerationTypeImpl.Enum.forString("ComputeResource")); DescriptionType rd = r.addNewResourceDescription(); rd.set(jdt.getJobDescription()); rd.setDialect("http://schemas.ggf.org/jsdl/2005/11/jsdl"); System.out.println("Generated UDAPRequest: \n"+udap.xmlText(new XmlOptions().setSavePrettyPrint())); UDAPResponseDocument udapResponse = UserClient.submitRequest(udap); System.out.println("got Response from client:\n"+udapResponse); } /* ** Construct a query for the registry based on the values enterend on the screen. */ private JobDefinitionType formatQuery(JobDefinitionDocument jsdl ,String architecture ,String txtRAM ,String txtDiskSpace ,String platform ) { JobDefinitionType jobdef = jsdl.addNewJobDefinition(); JobDescriptionType jobdesc = jobdef.addNewJobDescription(); ResourcesType res = jobdesc.addNewResources(); // Platform /* if (platform.length() > 0) { OperatingSystemTypeEnumeration.Enum osname = OperatingSystemTypeEnumeration.Enum.forString(platform); OperatingSystemType os = res.addNewOperatingSystem(); os.setDescription(platform); } */ // Architecture if (architecture.length() > 0) { ProcessorArchitectureEnumeration.Enum arch = ProcessorArchitectureEnumeration.Enum.forString(architecture); CPUArchitectureType cpuarch = res.addNewCPUArchitecture(); cpuarch.setCPUArchitectureName(arch); } // RAM if (txtRAM.length() > 0) { if (Double.parseDouble(txtRAM) > 0) { /* BoundaryType lower=BoundaryType.Factory.newInstance(); lower.setDoubleValue(Double.parseDouble(txtRAM)); RangeValueType rvt = RangeValueType.Factory.newInstance(); rvt.setLowerBoundedRange(lower); rvt = res.addNewTotalPhysicalMemory(); rvt.setLowerBoundedRange(lower); */ RangeValueType ram = res.addNewTotalPhysicalMemory(); ram.addNewExact().setEpsilon(Double.parseDouble(txtRAM)); } } // Diskspace. if (txtDiskSpace.length() > 0) { if (Double.parseDouble(txtDiskSpace) > 0) { RangeValueType diskSpace = res.addNewTotalDiskSpace(); diskSpace.addNewExact().setEpsilon(Double.parseDouble(txtDiskSpace)); } } // Check if jobdef is valid - this seems to be the wrong way around i.e. Bugger! is valid??? if (jobdef.validate()) { logger.info("VAlid jobdef"); } else { logger.info("Bugger!"); } return jobdef; } /* * Take a URI, strip out the path part and return it. */ private String getUUID(String URI) { URL selectedURI; try { selectedURI = new URL(URI); // discard the / at the begining of the path. return selectedURI.getPath().substring(1); } catch (MalformedURLException ex) { ex.printStackTrace(); return "-No UUID-"; } } /* * Read configuration document from file and return it as a string. */ private String getConfigDocument(String UUID) throws Exception { logger.info("Reading Debut configuration document."); InputStream iv_cfg = getClass().getResourceAsStream("iv_service_config.xml"); String request = inputStreamAsString(iv_cfg); request = request.replace("UUID_PARAMETER",UUID); iv_cfg.close(); //logger.info("Generated CR-UDAPREQUEST:"+u); return request; } /* * Read an input stream and return it as a String. */ private String inputStreamAsString(InputStream stream) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(stream)); StringBuilder sb = new StringBuilder(); String line = null; while ((line = br.readLine()) != null) { sb.append(line + "\n"); } br.close(); return sb.toString(); } }