package org.libvirt;
import java.util.Arrays;
import org.libvirt.jna.Libvirt;
import org.libvirt.jna.virSchedParameter;
import org.libvirt.jna.virSchedParameterValue;
import com.sun.jna.Native;
/**
* The abstract parent of the actual Schedparameter classes
*
* @author stoty
*
*/
public abstract class SchedParameter {
public static SchedParameter create(virSchedParameter vParam) {
SchedParameter returnValue = null;
if (vParam != null) {
switch (vParam.type) {
case (1):
returnValue = new SchedIntParameter(vParam.value.i);
break;
case (2):
returnValue = new SchedUintParameter(vParam.value.ui);
break;
case (3):
returnValue = new SchedLongParameter(vParam.value.l);
break;
case (4):
returnValue = new SchedUlongParameter(vParam.value.ul);
break;
case (5):
returnValue = new SchedDoubleParameter(vParam.value.d);
break;
case (6):
returnValue = new SchedBooleanParameter(vParam.value.b);
break;
}
if (returnValue != null) {
returnValue.field = Native.toString(vParam.field);
} else {
// FIXME
}
}
return returnValue;
}
public static virSchedParameter toNative(SchedParameter param) {
virSchedParameter returnValue = new virSchedParameter();
returnValue.value = new virSchedParameterValue();
returnValue.field = copyOf(param.field.getBytes(), Libvirt.VIR_DOMAIN_SCHED_FIELD_LENGTH);
returnValue.type = param.getType();
switch (param.getType()) {
case (1):
returnValue.value.i = ((SchedIntParameter) param).value;
returnValue.value.setType(int.class);
break;
case (2):
returnValue.value.ui = ((SchedUintParameter) param).value;
returnValue.value.setType(int.class);
break;
case (3):
returnValue.value.l = ((SchedLongParameter) param).value;
returnValue.value.setType(long.class);
break;
case (4):
returnValue.value.ul = ((SchedUlongParameter) param).value;
returnValue.value.setType(long.class);
break;
case (5):
returnValue.value.d = ((SchedDoubleParameter) param).value;
returnValue.value.setType(double.class);
break;
case (6):
returnValue.value.b = (byte) (((SchedBooleanParameter) param).value ? 1 : 0);
returnValue.value.setType(byte.class);
break;
}
return returnValue;
}
public static byte[] copyOf(byte[] original, int length) {
byte[] returnValue = new byte[length];
int originalLength = original.length;
Arrays.fill(returnValue, (byte) 0);
for (int x = 0; x < originalLength; x++) {
returnValue[x] = original[x];
}
return returnValue;
}
/**
* Parameter name
*/
public String field;
/**
* The type of the parameter
*
* @return the Type of the parameter
*/
public abstract int getType();
/**
* Utility function for displaying the type
*
* @return the Type of the parameter as string
*/
public abstract String getTypeAsString();
/**
* Utility function for displaying the value
*
* @return the value of the parameter in String form
*/
public abstract String getValueAsString();
}