/**
* 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.catalog.classes;
import edu.isi.pegasus.planner.catalog.transformation.classes.Arch;
import edu.isi.pegasus.planner.catalog.transformation.classes.Os;
import edu.isi.pegasus.planner.catalog.transformation.classes.VDSSysInfo;
import java.util.HashMap;
import java.util.Map;
/**
* An Adapter class that translates the old ( VDS era ) Arch and Os objects
* to the new NMI based Architecture and OS objects.
*
* @author Karan Vahi
* @version $Revision$
*/
public class VDSSysInfo2NMI {
/**
* The separator used to combine OS version and release.
*/
public static final String OS_COMBINE_SEPARATOR = "_";
/**
* The map storing architecture to corresponding NMI architecture platforms.
*/
private static Map mVDSArchToNMIArch = null;
/**
* Singleton access to the architecture to NMI arch map.
*
* @return Map mapping VDS Arch to NMI architecture
*/
private static Map<Arch,SysInfo.Architecture> vdsArchToNMIArchMap(){
//singleton access
if( mVDSArchToNMIArch == null ){
mVDSArchToNMIArch = new HashMap();
mVDSArchToNMIArch.put( Arch.INTEL32, SysInfo.Architecture.x86 );
mVDSArchToNMIArch.put( Arch.INTEL64, SysInfo.Architecture.x86_64 );
mVDSArchToNMIArch.put( Arch.AMD64, SysInfo.Architecture.amd64 );
mVDSArchToNMIArch.put( Arch.SPARCV7, SysInfo.Architecture.sparcv7 );
mVDSArchToNMIArch.put( Arch.SPARCV9, SysInfo.Architecture.sparcv9 );
}
return mVDSArchToNMIArch;
}
/**
* The map storing OS to corresponding NMI OS platforms.
*/
private static Map<Os,SysInfo.OS> mVDSOSToNMIOS = null;
/**
* Singleton access to the os to NMI os map.
*
* @return Map mapping VDS Os to NMI OS
*/
private static Map<Os,SysInfo.OS> vdsOsToNMIOSMap(){
//singleton access
if( mVDSOSToNMIOS == null ){
mVDSOSToNMIOS = new HashMap();
mVDSOSToNMIOS.put( Os.LINUX, SysInfo.OS.linux );
mVDSOSToNMIOS.put( Os.AIX, SysInfo.OS.aix );
mVDSOSToNMIOS.put( Os.SUNOS, SysInfo.OS.sunos );
mVDSOSToNMIOS.put( Os.WINDOWS, SysInfo.OS.windows );
}
return mVDSOSToNMIOS;
}
/**
* Converts VDS SysInfo to NMI based SysInfo object
*
* @param sysinfo VDS based SysInfo object
*
* @return NMI SysInfo object.
*/
public static SysInfo vdsSysInfo2NMI(VDSSysInfo sysinfo) {
SysInfo result = new SysInfo();
result.setArchitecture( vdsArchToNMIArch( sysinfo.getArch() ) );
result.setOS( vdsOsToNMIOS( sysinfo.getOs() ) );
String glibc = sysinfo.getGlibc();
if( glibc != null ){
result.setGlibc( glibc );
}
//what we call os release and version now was called os version!
String osVersion = sysinfo.getOsversion();
if( osVersion != null && osVersion.length() != 0){
if( osVersion.contains( OS_COMBINE_SEPARATOR ) ){
//split on _
int last = osVersion.lastIndexOf( OS_COMBINE_SEPARATOR );
result.setOSRelease( osVersion.substring( 0, last ));
result.setOSVersion( osVersion.substring( last + 1 ));
}
else{
result.setOSRelease( osVersion );
}
}
return result;
}
/**
* Returns the NMI Architecture object corresponding to the VDS Arch
* object
*
* @param arch architecture in the VDS format.
*
* @return NMI Architecture
*/
public static SysInfo.Architecture vdsArchToNMIArch( Arch arch ){
return vdsArchToNMIArchMap().get( arch );
}
/**
* Returns the NMI Architecture object corresponding to the VDS Arch
* object
*
* @param arch architecture in the VDS format.
*
* @return NMI Architecture
*/
public static SysInfo.Architecture vdsArchToNMIArch( String arch ){
return vdsArchToNMIArchMap().get( Arch.fromString(arch) );
}
/**
* Returns the NMI OS object corresponding to the VDS Os
* object
*
* @param os os in the VDS format.
*
* @return NMI OS
*/
public static SysInfo.OS vdsOsToNMIOS( Os os ){
return vdsOsToNMIOSMap().get( os );
}
/**
* Returns the NMI OS object corresponding to the VDS Os
* object
*
* @param os os in the VDS format.
*
* @return NMI OS
*/
public static SysInfo.OS vdsOsToNMIOS( String os ){
return vdsOsToNMIOSMap().get( Os.fromValue(os) );
}
public static void main( String[] args ){
VDSSysInfo v = new VDSSysInfo();
v.setArch(Arch.AMD64);
v.setOs(Os.LINUX);
v.setOsversion( "rhel_4" );
SysInfo s = VDSSysInfo2NMI.vdsSysInfo2NMI(v);
System.out.println( s.getOSRelease() );
System.out.println( s.getOSVersion() );
v.setOsversion( "rhel_" );
s = VDSSysInfo2NMI.vdsSysInfo2NMI(v);
System.out.println( s.getOSRelease() );
System.out.println( s.getOSVersion() );
}
}