litesoft
@ 804
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
// This Source Code is in the Public Domain per: http://litesoft.org/License.txt package org.litesoft.ui.def.nonpublic.support; import org.litesoft.core.hierarchicaldata.*; import org.litesoft.core.typeutils.*; import org.litesoft.core.util.*; import org.litesoft.ui.def.*; import org.litesoft.uispecification.*; public class UiDvRehydrate { private Factory mFactory; public UiDvRehydrate( Factory pFactory ) { mFactory = pFactory; } public UiDef process( HierarchicalDataSource.Node pNode ) { UiDef def = mFactory.create( pNode.getName() ); // node will not be null UiD_Attribute[] attributes = def.getDefAttributes(); for ( int i = 0; i < attributes.length; i++ ) { attributes[i].rehydrate( pNode ); } HierarchicalDataSource.Node child = pNode.getNextChild(); if ( def instanceof UiFontable ) { UiFontable zFontable = (UiFontable) def; while ( (child != null) && isFontAttribute( zFontable, child.getName() ) ) { String zAttributeName = child.getName(); UiFont font = UiFont.rehydrate( child ); zFontable.setFont( zAttributeName, font ); child = pNode.getNextChild(); } } if ( def instanceof Hintable ) { Hintable hintable = (Hintable) def; while ( (child != null) && "Hint".equals( child.getName() ) ) { String[] names = child.getAttributeNames(); if ( UtilsCommon.isNullOrEmpty( names ) ) { throw new IllegalArgumentException( "Hint w/o Name & Value" ); } if ( names.length > 1 ) { throw new IllegalArgumentException( "Hint with more than 1 Name & Value" ); } String hName = names[0]; String prev = hintable.addHint( hName, child.getAttributeValue( hName ) ); if ( prev != null ) { throw new IllegalArgumentException( "Duplicate Hint (" + hName + ") on " + def ); } child = pNode.getNextChild(); } } if ( def instanceof UiContainerMarker ) { UiChildrenHelper childrenHelper = ((UiContainerMarker) def).getChildrenHelper(); while ( child != null ) { childrenHelper.addChild( process( child ) ); child = pNode.getNextChild(); } } pNode.assertNoMoreChildren( child ); return def; } private boolean isFontAttribute( UiFontable pUiFontable, String pName ) { String[] attributeNames = pUiFontable.getFontAttributeNames(); if ( attributeNames != null ) { for ( int i = 0; i < attributeNames.length; i++ ) { if ( Objects.areNonArraysEqual( pName, attributeNames[i] ) ) { return true; } } } return false; } } |