用config file 設定 Vaadin component 的特性

是這樣的,

我有個idea, 但不知是否可行, 所以在這裡請教一下大家.

我想建立一個config file, 在這個file 裡, 放了每個component 的 properties, 例如, 一個textfield 的max and min size, 是否visible 等等.

情況:

假如我有不同部門和職位的同事 (e.g. 校長, 副校長, 數學系老師們, 英文系老師們)

有一個ui, 這個ui 是用來給副校長編排每位老師教那些 classes 和每星期有多少課節等, 而校長在這個ui 裡能審批副校長的安排, 老師們只可以在這個ui裡看.

在這個ui 裡有 “退出”, “拒絕”, “接受”, “編輯” 和 “儲存” 按鈕.

老師們有 "退出"按鈕.
校長有 “拒絕” 和 “接受” 按鈕.
副校長有 “編輯” 和 “儲存” 按鈕.

我想在 config file 裡,

principal.ui.cancel=true
principal.ui.reject=true
principal.ui.accept=true
principal.ui.edit=false
principal.ui.save=false

vice.principal.ui.cancel=true
vice.principal.ui.reject=false
vice.principal.ui.accept=false
vice.principal.ui.edit=true
vice.principal.ui.save=true

teacher.ui.cancel=true
teacher.ui.reject=false
teacher.ui.accept=false
teacher.ui.edit=false
teacher.ui.save=false

我怎樣可以把我 config file 裡的設定 apply 入 vaadin 裡呢?

实现应该不难吧,无非根据当前人判断一下,根据配制文件设置一下各属性

最後我都能成功 implement 個idea. 不過我有少少 principles 改了.

ClassScheduleComponent.btnEdit=role:PRINCIPAL,TEACHER
ClassScheduleComponent.btnAprv=role:VPRINCIPAL,TEACHER
ClassScheduleComponent.btnRjt=role:VPRINCIPAL,TEACHER
ClassScheduleComponent.btnSave=role:PRINCIPAL,TEACHER

我read了properties file 裡所有的setting, 然後自己寫左個parser 去 form 了一隻 static object 出來 (這可以reduce loading and parsing 的動作和時間. 在整個 web application 只跑一次)

申利: role:PRINCIPAL,TEACHER 可以自己定立更多的rules.

之後, 再寫多一個helper 去 loop 晒成隻 ClassScheduleComponent class 從而去set component invisible (我 default 所有的component 都是 true)

public static void setInvisibleComponent(Object obj, LoginUser loginUser){
		Map<String, List<ComponentProperty>> ivsbMap = LoadComponentPropertyHelper.getPrptyMap();
		//Get all the private or public member in the class
		Field[] fields = obj.getClass().getDeclaredFields();
		
		for (Field f : fields) {
			//Form a ComponentSetting Key for searching
			String cmpntKey = obj.getClass().getSimpleName()+"."+f.getName();

			//The cmpntKey is found in the componentSetting.properties file, do the following
			if(ivsbMap.containsKey(cmpntKey)){

				//Get all the possible cases with respected to the cmpntKey
				List<ComponentProperty> prptyList = ivsbMap.get(cmpntKey);

				for (ComponentProperty cas : prptyList) {
					//DO you check code here
				}

				if(bingoAllChecking){
					Component c = (Component) ReflectUtils.getInstance().getFieldValue(obj, f.getName());
					c.setVisible(!bingoAll);
					log.debug("		Set Visible = False for " + f.getName());
					break;
				}
			}
		}
	}

哈哈,你的中英结合太牛x了,直接去英文区提问多好了,在中文区费这劲干嘛。