Пожалуйста, рассмотрите следующий фрагмент типичного файла конфигурации VMWare (* .vmx):
memsize = "2048"
MemTrimRate = "-1"
mks.enable3d = "TRUE"
nvram = "Windows Server 2003 Standard Edition.nvram"
pciBridge0.pciSlotNumber = "17"
pciBridge0.present = "TRUE"
pciBridge4.functions = "8"
pciBridge4.pciSlotNumber = "18"
pciBridge4.present = "TRUE"
pciBridge4.virtualDev = "pcieRootPort"
pciBridge5.functions = "8"
pciBridge5.pciSlotNumber = "19"
pciBridge5.present = "TRUE"
pciBridge5.virtualDev = "pcieRootPort"
pciBridge6.functions = "8"
pciBridge6.pciSlotNumber = "20"
pciBridge6.present = "TRUE"
pciBridge6.virtualDev = "pcieRootPort"
pciBridge7.functions = "8"
pciBridge7.pciSlotNumber = "32"
pciBridge7.present = "TRUE"
pciBridge7.virtualDev = "pcieRootPort"
replay.filename = ""
replay.supported = "FALSE"
roamingVM.exitBehavior = "go"
Наблюдая эту конфигурацию, можно представить тип java-компонента PciBridge
со следующей сигнатурой:
class PciBridge
{
public int pciSlotNumber; // or public int getPciSlotNumber(){...} and public void setPciSlotNumber(int v){...}
public boolean present; // or get/is/set methods
public int functions; // or get/set methods
public String virtualDev; // or get/set methods
}
Более того, менеджер конфигурации, ответственный за чтение файлов vmx, может предоставить следующий метод:
public <T> List<T> getObjects(final String prop, Class<T> clazz);
И затем, учитывая вышеупомянутую конфигурацию, вызов getObjects("pciBridge", PciBridge.class)
вернет списокиз всех PciBridge
объектов, указанных в конфигурации - в нашем случае их всего 5.
Как реализовать эту функцию?Конечно, я видел один и тот же шаблон в нескольких различных продуктах, поэтому я полагаю, что должно быть что-то готовое для реализации этой функциональности.
Есть идеи?
Спасибо.
РЕДАКТИРОВАТЬ
Исправление - я не утверждаю, что VMWare использует формат файла свойств java (двойные кавычки являются избыточными), но дух тот же.Кроме того, есть подходящие Java-приложения, использующие тот же шаблон.