/**
* Copyright 2007-2008 University Of Southern California
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package edu.isi.pegasus.planner.invocation;
import java.io.IOException;
import java.io.Writer;
/**
* The Machine element groups a time stamp, the page size, the generic
* utsname information, and a machine-specific content collecting element.
*
* @author Karan Vahi
* @author Jens-S. Vöckler
* @version $Revision$
*/
public class Machine extends Invocation
{
/**
* element name
*/
public static final String ELEMENT_NAME = "machine";
/**
* The only attribute to the machine element is required.
*/
private long m_pagesize;
/**
* The time when the snapshot was taken.
*/
private Stamp m_stamp;
/**
* The uname child element is mandatory.
*/
private Uname m_uname;
/**
* This is a grouping element for the remaining machine-specific
* items.
*/
private MachineSpecific m_specific;
/**
* Default constructor.
*/
public Machine()
{
m_pagesize = 0;
m_stamp = null;
m_uname = null;
m_specific = null;
}
/**
* Sets the page size.
*
* @param size is the remote page size in byte.
*/
public void setPageSize( long size )
{
m_pagesize = size;
}
/**
* Obtains the page size information.
*
* @return pagesize in byte
*/
public long getPageSize()
{
return m_pagesize;
}
/**
* Sets the time stamp when the machine info was obtained.
*
* @param stamp is the time stamp
*/
public void setStamp( Stamp stamp )
{
m_stamp = stamp;
}
/**
* Obtains the time stamp information when the remote machine element
* was recorded.
*
* @return stamp is a time stamp
*/
public Stamp getStamp()
{
return m_stamp;
}
/**
* Sets the utsname generic system information record.
*
* @param uname is the utsname record
*/
public void setUname( Uname uname )
{
m_uname = uname;
}
/**
* Obtains the utsname generic system information record.
*
* @return uname is the utsname record
*/
public Uname getUname()
{
return m_uname;
}
/**
* Sets the machine-specific grouping element.
*
* @param m is the machine specific grouping element
*/
public void setMachineSpecific( MachineSpecific m )
{
m_specific = m;
}
/**
* Obtains the machine-specific grouping element.
*
* @return machine
*/
public MachineSpecific getMachineSpecific()
{
return m_specific;
}
/**
* Returns the name of the xml element corresponding to the object.
*
* @return name
*/
public String getElementName()
{
return ELEMENT_NAME;
}
/**
* Converts the active state into something meant for human consumption.
* The method will be called when recursively traversing the instance
* tree.
*
* @param stream is a stream opened and ready for writing. This can also
* be a string stream for efficient output.
*/
public void toString(Writer stream)
throws IOException
{
throw new IOException( "method not implemented, please contact pegasus-support@isi.edu" );
}
/**
* Dump the state of the current element as XML output. This function
* traverses all sibling classes as necessary, and converts the data
* into pretty-printed XML output. The stream interface should be able
* to handle large output efficiently.
*
* @param stream is a stream opened and ready for writing. This can also
* be a string stream for efficient output.
* @param indent is a <code>String</code> of spaces used for pretty
* printing. The initial amount of spaces should be an empty string.
* The parameter is used internally for the recursive traversal.
* If a <code>null</code> value is specified, no indentation nor
* linefeeds will be generated.
* @param namespace is the XML schema namespace prefix. If neither
* empty nor null, each element will be prefixed with this prefix,
* and the root element will map the XML namespace.
* @exception IOException if something fishy happens to the stream.
*/
public void toXML( Writer stream, String indent, String namespace )
throws IOException
{
String newLine = System.getProperty("line.separator", "\r\n");
String tag = (namespace != null && namespace.length() > 0) ?
namespace + ":" : "";
tag = tag + getElementName();
if ( indent != null && indent.length() > 0 ) stream.write(indent);
stream.write( '<' );
stream.write( tag );
writeAttribute( stream, " page-size=\"", Long.toString(m_pagesize) );
stream.write( '>' );
if ( indent != null ) stream.write(newLine);
// dump content
String newIndent = ( indent == null ) ? null : indent + " ";
m_stamp.toXML( stream, newIndent, namespace );
m_uname.toXML( stream, newIndent, namespace );
m_specific.toXML( stream, newIndent, namespace );
// close element
stream.write( "</" );
stream.write( tag );
stream.write( ">" );
if ( indent != null ) stream.write( newLine );
}
}