42 import java.io.IOException;
43 import java.lang.reflect.Field;
44 import java.util.ArrayList;
45 import java.util.Collections;
46 import java.util.HashMap;
50 import javax.xml.bind.JAXBException;
51 import javax.xml.parsers.ParserConfigurationException;
52 import javax.xml.xpath.XPathExpressionException;
54 import org.xml.sax.SAXException;
56 import okw.core.IOKW_FN;
57 import okw.exceptions.*;
58 import okw.log.Logger_Sngltn;
96 public static Map<String, Object> myFrameObjectDictionary =
new HashMap<String, Object>();
98 public static Map<String, OKW> myAnnotationDictionary =
new HashMap<String, OKW>();
130 public static FrameObjectDictionary_Sngltn getInstance() throws XPathExpressionException, JAXBException, ParserConfigurationException, SAXException,
136 if ( Instance ==
null )
141 if ( Instance ==
null )
150 OKW_HandleException.StopRunning( e, Instance.getClass() );
197 Object lvo_Return =
null;
205 if ( myFrameObjectDictionary.containsKey( FNParentObject ) )
209 lvo_Return = myFrameObjectDictionary.get( FNParentObject );
218 String lvsMessage =
LM.
GetMessage(
"GetParentObjectByName",
"OKWFrameObjectParentNotFoundException", FNParentObject );
224 if ( lvo_Return !=
null )
252 ArrayList<String> lvAlReturn =
new ArrayList<String>();
254 Set<String> lvKeys = myFrameObjectDictionary.keySet();
256 for ( Object lvoKey : lvKeys )
258 String lvsKey = (String)lvoKey;
260 if (lvsKey.startsWith( FN_Parent ) )
262 lvAlReturn.add( lvsKey );
298 public Object
getChildObjectByName( String fps_ParentObject, String fps_ChildObject )
throws XPathExpressionException, IllegalArgumentException, IllegalAccessException
300 Object lvo_Return =
null;
301 String lvs_ObjectName = fps_ParentObject +
"." + fps_ChildObject;
303 Log.
LogFunctionStartDebug(
"FrameObjectDictionary.GetChildObjectByName",
"fps_ParentObject", fps_ParentObject,
"fps_ChildObject", fps_ChildObject );
309 if ( myFrameObjectDictionary.containsKey( lvs_ObjectName ) )
315 lvo_Return = myFrameObjectDictionary.get( lvs_ObjectName );
325 String lvsMessage =
LM.
GetMessage(
"GetChildObjectByName",
"OKWFrameObjectChildNotFoundException", lvs_ObjectName );
331 if ( lvo_Return ==
null )
357 public static void init() throws ClassNotFoundException, InstantiationException, JAXBException, ParserConfigurationException, SAXException, IOException,
358 XPathExpressionException, IllegalArgumentException, IllegalAccessException
368 myFrameObjectDictionary.clear();
372 Set<String> Keys = myFrameObjectDictionary.keySet();
374 ArrayList<String> myList =
new ArrayList<String>();
376 for ( String Key : Keys )
381 Collections.sort( myList );
385 for ( String Element : myList )
424 public static ArrayList<Class<?>>
getListOfOKWGuiClasses() throws ClassNotFoundException, IOException, XPathExpressionException
426 String lvsNamespace =
"okw.gui.frames";
427 ArrayList<Class<?>> lvALReturn =
new ArrayList<Class<?>>();
429 ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
432 ArrayList<String> lvALClassNames =
OKW_GetJavaClass.getClasses( lvsNamespace );
437 for ( String lvsClass : lvALClassNames )
439 Class<?> aClass = classLoader.loadClass( lvsClass );
443 if ( aClass.isAnnotationPresent(
OKW.class ) )
445 lvALReturn.add( aClass );
449 catch (ClassNotFoundException e)
473 private static void frameScan( ) throws InstantiationException, XPathExpressionException,
474 IllegalArgumentException, IllegalAccessException, ClassNotFoundException, IOException
476 Object lvTypeInstanceAsObject =
null;
486 for ( Class<?> lvOKWGuiClass : lvOKWGuiClasses )
494 String lvsFNWindow = lvOKWWindow.
FN();
497 if ( lvsFNWindow !=
null && !lvsFNWindow.isEmpty() )
500 Log.
LogPrint(
"Type: '" + lvTypeInstanceAsObject.getClass().getName() +
"'" );
502 ((
IOKW_FN)lvTypeInstanceAsObject).setFN( lvsFNWindow );
503 ((
IOKW_FN)lvTypeInstanceAsObject).setKN( lvsFNWindow );
505 myFrameObjectDictionary.put( lvsFNWindow, lvTypeInstanceAsObject );
506 myAnnotationDictionary.put( lvsFNWindow, lvOKWWindow );
512 Field[] lvFields = lvTypeInstanceAsObject.getClass().getFields();
514 for ( Field lvField : lvFields )
517 String myFieldType = lvField.getType().getName();
520 Object lvFieldInstance = lvField.get( lvTypeInstanceAsObject );
522 if ( lvField.isAnnotationPresent(
OKW.class ) )
524 OKW myFN = lvField.getAnnotation(
OKW.class );
527 String lvsFNChild = myFN.
FN();
528 String lvsChildKey = lvsFNWindow +
"." + lvsFNChild;
535 myAnnotationDictionary.put( lvsChildKey, myFN );
540 ((
IOKW_FN ) lvFieldInstance).setKN( lvsChildKey );
541 ((
IOKW_FN ) lvFieldInstance).setFN( lvsFNChild );
542 ((
IOKW_FN ) lvFieldInstance).setParentFN( lvsFNWindow );
543 myFrameObjectDictionary.put( lvsChildKey, lvFieldInstance );
545 frameScanFieldsRecursively( lvField, lvFieldInstance, lvsFNWindow );
547 catch (java.lang.ClassCastException e)
549 System.out.print(
"Uuupps! There is a ClassCastException... ");
559 frameScanFieldsRecursively( lvField, lvFieldInstance, lvsFNWindow );
573 private static void frameScanFieldsRecursively( Field fpParentField, Object fpParentFieldInstance, String fpsWindowName )
580 Field[] lvFields = fpParentField.getType().getFields();
582 for ( Field lvField : lvFields )
585 String FieldType = lvField.getType().getName();
588 Object lvFieldInstance = lvField.get( fpParentFieldInstance );
590 if ( FieldType.startsWith(
"okw.gui." ) )
592 if ( lvField.isAnnotationPresent(
OKW.class ) )
594 OKW myFN = lvField.getAnnotation(
OKW.class );
597 String lvsFNChild = myFN.
FN();
598 String lvsKey = fpsWindowName +
"." + lvsFNChild;
600 if ( myFrameObjectDictionary.containsKey( lvsKey ) )
612 myAnnotationDictionary.put( lvsKey, myFN );
614 (( IOKW_FN ) lvFieldInstance).setKN( lvsKey );
615 (( IOKW_FN ) lvFieldInstance).setFN( lvsFNChild );
616 (( IOKW_FN ) lvFieldInstance).setParentFN( fpsWindowName );
618 myFrameObjectDictionary.put( lvsKey, lvFieldInstance );
620 frameScanFieldsRecursively( lvField, lvFieldInstance, fpsWindowName );
626 frameScanFieldsRecursively( lvField, lvFieldInstance, fpsWindowName );
645 OKW lvsReturn =
null;
647 if ( fpObject.getClass().isAnnotationPresent(
OKW.class ) )
649 lvsReturn = fpObject.getClass().getAnnotation(
OKW.class );
684 @SuppressWarnings(
"unused" )
685 private Object createInstanceByObjectName( String fps_ParentObject, String fps_ChildObject ) throws XPathExpressionException
687 Log.
LogFunctionStartDebug(
"FrameObjectDictionary.CreateInstanceByObjectName",
"fps_ParentObject", fps_ParentObject,
"fps_ChildObject", fps_ChildObject );
689 Object myParentObject =
null;
690 Object myChildObject =
null;
700 if ( myParentObject !=
null )
731 return myChildObject;
755 private Object
getChildObjectByName( Object fpo_ParentObject, String fps_ChildName )
throws XPathExpressionException
757 Object lvo_Return =
null;
759 Log.
LogFunctionStartDebug(
"FrameObjectDictionary.GetChildObjectByName",
"fpo_ParentObject", fpo_ParentObject.toString(),
"fps_ChildName", fps_ChildName );
763 Field fieldInfoObj = fpo_ParentObject.getClass().getField( fps_ChildName );
772 lvo_Return = fieldInfoObj;
774 catch (SecurityException e)
780 catch (NoSuchFieldException e)
786 .getClass().getName() ) );
797 public void printObjectDictionary()
800 Set<String> mySet = myFrameObjectDictionary.keySet();
802 for ( String myKey : mySet )
804 System.out.println(
" Key: " + myKey );
805 System.out.println(
"Value: " + myFrameObjectDictionary.get( myKey ).toString() );
806 System.out.println(
" Type: " + myFrameObjectDictionary.get( myKey ).getClass().getName() );
807 System.out.println(
"---------------------------------------------------------------------\n" );
834 if (myAnnotationDictionary.containsKey(fpKN) )
836 Return = myAnnotationDictionary.get( fpKN );