View Javadoc

1   package cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages;
2    		
3    		// --- IMPORTS FROM /messages/settings/javasettings/javaimport BEGIN
4   			import java.util.*;import javax.vecmath.*;import cz.cuni.amis.pogamut.base.communication.messages.*;import cz.cuni.amis.pogamut.base.communication.worldview.*;import cz.cuni.amis.pogamut.base.communication.worldview.event.*;import cz.cuni.amis.pogamut.base.communication.worldview.object.*;import cz.cuni.amis.pogamut.multi.communication.worldview.object.*;import cz.cuni.amis.pogamut.base.communication.translator.event.*;import cz.cuni.amis.pogamut.multi.communication.translator.event.*;import cz.cuni.amis.pogamut.base3d.worldview.object.*;import cz.cuni.amis.pogamut.base3d.worldview.object.event.*;import cz.cuni.amis.pogamut.ut2004.communication.messages.*;import cz.cuni.amis.pogamut.ut2004.communication.worldview.objects.*;import cz.cuni.amis.pogamut.ut2004multi.communication.worldview.objects.*;import cz.cuni.amis.pogamut.ut2004.communication.translator.itemdescriptor.*;import cz.cuni.amis.pogamut.ut2004.communication.messages.ItemType.Category;import cz.cuni.amis.pogamut.unreal.communication.messages.UnrealId;import cz.cuni.amis.utils.exception.*;import cz.cuni.amis.pogamut.base.communication.translator.event.IWorldObjectUpdateResult.Result;import cz.cuni.amis.utils.SafeEquals;import cz.cuni.amis.pogamut.base.agent.*;import cz.cuni.amis.pogamut.multi.agent.*;import cz.cuni.amis.pogamut.multi.communication.worldview.property.*;import cz.cuni.amis.pogamut.ut2004multi.communication.worldview.property.*;import cz.cuni.amis.utils.token.*;import cz.cuni.amis.utils.*;
5   		// --- IMPORTS FROM /messages/settings/javasettings/javaimport END
6   		
7   		
8   		// --- IMPORTS FROM extra/code/java/javapart/classcategory[@name='all'] BEGIN
9   				
10  		// --- IMPORTS FROM extra/code/java/javapart/classcategory[@name='all'] END
11  		
12  		// --- IMPORTS FROM extra/code/java/javapart/classcategory[@name=static]+classtype[@name=impl] BEGIN
13  		
14  		// --- IMPORTS FROM extra/code/java/javapart/classcategory[@name=static]+classtype[@name=impl] END
15      
16   		/**
17           *  
18              				Implementation of the static part of the GameBots2004 message NAV.  
19              			
20           *
21           *  <p></p><p></p>
22           *  Complete message documentation:               
23           *  
24  		Synchronous message - however only NavPoints marking item pickup locations are exported synchronously. Other NavPoints are not exported synchronously at all, even if the bot can actually see them (but note that ALL NavPoints are exported in the handshake between bot and the server). Exporting NavPoints synchronously took a lot of UT server resources with limited information gain (in Pogamut there is now available visibility matrix holding static information which points can be seen from other points). NavPoint carries information about UT navigation point - location, paths and some additional information are stored there (if it is an ambush point, or sniper point, etc.).
25     
26           */
27   	public class NavPointStaticImpl 
28    						extends
29    						NavPointStatic
30  	    {
31   	
32      	
33      	
34      	/**
35      	 * Parameter-less contructor for the message.
36      	 */
37  		public NavPointStaticImpl()
38  		{
39  		}
40  	
41      	
42      	
43      	
44      	/**
45  		 * Creates new instance of the message NavPoint.
46  		 * 
47  		Synchronous message - however only NavPoints marking item pickup locations are exported synchronously. Other NavPoints are not exported synchronously at all, even if the bot can actually see them (but note that ALL NavPoints are exported in the handshake between bot and the server). Exporting NavPoints synchronously took a lot of UT server resources with limited information gain (in Pogamut there is now available visibility matrix holding static information which points can be seen from other points). NavPoint carries information about UT navigation point - location, paths and some additional information are stored there (if it is an ambush point, or sniper point, etc.).
48     
49  		 * Corresponding GameBots message
50  		 *   (static part)
51  		 *   is
52  		 *   NAV.
53  		 * 
54   	  	 * 
55  		 *   
56  		 *     @param Id 
57  			A unique Id of this navigation point assigned by the game.
58  		
59  		 *   
60  		 * 
61  		 *   
62  		 * 
63  		 *   
64  		 * 
65  		 *   
66  		 * 
67  		 *   
68  		 *     @param Item 
69  			Unique Id of the respawned item (the item respawns at this
70  			point). Not sent if point is not an inventory spot. Sent only in HandShake.
71  		
72  		 *   
73  		 * 
74  		 *   
75  		 *     @param ItemClass 
76              Class of the item (e.g. xWeapons.FlakCannonPickup). Not sent if point is not an inventory spot. Sent only in HandShake.
77          
78  		 *   
79  		 * 
80  		 *   
81  		 * 
82  		 *   
83  		 * 
84  		 *   
85  		 *     @param Mover 
86              If this NavPoint is marking some mover, the mover id will be here. Not sent if point is not a Door, a LiftCenter or a LiftExit. Sent only in HandShake.
87          
88  		 *   
89  		 * 
90  		 *   
91  		 *     @param LiftOffset 
92              Starting vector between MyLift location and LiftCenter location. Not sent if point is not a LiftCenter. Sent only in HandShake.
93          
94  		 *   
95  		 * 
96  		 *   
97  		 *     @param LiftJumpExit 
98              Boolean. If we can/should exit the lift by a jump when near the destination place. Not sent if point is not a LiftExit. Sent only in HandShake.
99          
100 		 *   
101 		 * 
102 		 *   
103 		 *     @param NoDoubleJump 
104             Boolean. If we should or not use double jump when exiting lift with a jump. Not sent if point is not a LiftExit. Sent only in HandShake.
105         
106 		 *   
107 		 * 
108 		 *   
109 		 *     @param InvSpot 
110 			If this is an inventory spot (item is respawned at this point).
111 		
112 		 *   
113 		 * 
114 		 *   
115 		 *     @param PlayerStart 
116 			If this is a player start (players and/or bots are respawned at this point).
117 		
118 		 *   
119 		 * 
120 		 *   
121 		 *     @param TeamNumber 
122 			Will be sent if this is a player start. In Team games (team deathmatch, capture the flag, domination) holds information about which team respawns at this player start spot. In non-team games will return 0!
123 		
124 		 *   
125 		 * 
126 		 *   
127 		 *     @param DomPoint If this point marks a DominationPoint (for BotDoubleDomination game).
128 		 *   
129 		 * 
130 		 *   
131 		 * 
132 		 *   
133 		 *     @param Door 
134 			If this point marks a door mover.
135 		
136 		 *   
137 		 * 
138 		 *   
139 		 *     @param LiftCenter 
140 			If this point marks a lift center (used to mark center of a lift mover, note that this point will be always moved with the lift).
141 		
142 		 *   
143 		 * 
144 		 *   
145 		 *     @param LiftExit 
146 			If this point marks a lift exit (used to mark exit point of a lift mover).
147 		
148 		 *   
149 		 * 
150 		 *   
151 		 *     @param AIMarker 
152 			If this point is an AI marker - marks an interesting spot in the environment. May be ambush point or sniping spot, etc.
153 		
154 		 *   
155 		 * 
156 		 *   
157 		 *     @param JumpSpot 
158 			If this point marks a jump spot (a special device that causes the bot to jump high or far).
159 		
160 		 *   
161 		 * 
162 		 *   
163 		 *     @param JumpPad 
164 			If this point marks a jump pad (a special device that causes the bot to jump high or far).
165 		
166 		 *   
167 		 * 
168 		 *   
169 		 *     @param JumpDest 
170 			If this point marks a jump destination - some place that can be reached by some special jump.
171 		
172 		 *   
173 		 * 
174 		 *   
175 		 *     @param Teleporter 
176 			If this point marks a teleport. 
177 		
178 		 *   
179 		 * 
180 		 *   
181 		 *     @param Rotation 
182 			If the type is AIMarker. The rotation the bot should be
183 			facing, when doing the action specified by AIMarker. Sent only in HandShake.
184 		
185 		 *   
186 		 * 
187 		 *   
188 		 *     @param RoamingSpot 
189 			Some ambush point, where is good chance to intercept
190 			approaching opponents. Sent only in HandShake.
191 		
192 		 *   
193 		 * 
194 		 *   
195 		 *     @param SnipingSpot Point good for sniping. Sent only in HandShake.
196 		 *   
197 		 * 
198 		 *   
199 		 *     @param ItemInstance If item should be present at this navpoint it's instance will be here.
200 		 *   
201 		 * 
202 		 *   
203 		 *     @param OutgoingEdges Maps edge-LEADING_TO-navpoint-UnrealId to neighbour link, those are outgoing edges (those edges that originates in this navpoint going to another one, those you may usually travel).
204 		 *   
205 		 * 
206 		 *   
207 		 *     @param IncomingEdges Maps edge-ORIGINATES_FROM-navpoint-UnrealId to neighbour link, those are incoming edges (those edges that originates in different navpoint and ends here, do not use this to ask whether you can get to navpoint of specific unreal id, use OutgoingEdges instead).
208 		 *   
209 		 * 
210 		 *   
211 		 *     @param PreferedWeapon 
212 			Class of the weapon that should be prefered when using this
213 			point for AIMarker specified action. Sent only in HandShake.
214 		
215 		 *   
216 		 * 
217 		 */
218 		public NavPointStaticImpl(
219 			UnrealId Id,  UnrealId Item,  ItemType ItemClass,  UnrealId Mover,  Vector3d LiftOffset,  boolean LiftJumpExit,  boolean NoDoubleJump,  boolean InvSpot,  boolean PlayerStart,  int TeamNumber,  boolean DomPoint,  boolean Door,  boolean LiftCenter,  boolean LiftExit,  boolean AIMarker,  boolean JumpSpot,  boolean JumpPad,  boolean JumpDest,  boolean Teleporter,  Rotation Rotation,  boolean RoamingSpot,  boolean SnipingSpot,  Item ItemInstance,  Map<UnrealId, NavPointNeighbourLink> OutgoingEdges,  Map<UnrealId, NavPointNeighbourLink> IncomingEdges,  String PreferedWeapon
220 		) {
221 			
222 					this.Id = Id;
223 				
224 					this.Item = Item;
225 				
226 					this.ItemClass = ItemClass;
227 				
228 					this.Mover = Mover;
229 				
230 					this.LiftOffset = LiftOffset;
231 				
232 					this.LiftJumpExit = LiftJumpExit;
233 				
234 					this.NoDoubleJump = NoDoubleJump;
235 				
236 					this.InvSpot = InvSpot;
237 				
238 					this.PlayerStart = PlayerStart;
239 				
240 					this.TeamNumber = TeamNumber;
241 				
242 					this.DomPoint = DomPoint;
243 				
244 					this.Door = Door;
245 				
246 					this.LiftCenter = LiftCenter;
247 				
248 					this.LiftExit = LiftExit;
249 				
250 					this.AIMarker = AIMarker;
251 				
252 					this.JumpSpot = JumpSpot;
253 				
254 					this.JumpPad = JumpPad;
255 				
256 					this.JumpDest = JumpDest;
257 				
258 					this.Teleporter = Teleporter;
259 				
260 					this.Rotation = Rotation;
261 				
262 					this.RoamingSpot = RoamingSpot;
263 				
264 					this.SnipingSpot = SnipingSpot;
265 				
266 					this.ItemInstance = ItemInstance;
267 				
268 					this.OutgoingEdges = OutgoingEdges;
269 				
270 					this.IncomingEdges = IncomingEdges;
271 				
272 					this.PreferedWeapon = PreferedWeapon;
273 				
274 		}
275     
276     	/**
277 		 * Cloning constructor from the full message.
278 		 *
279 		 * @param original
280 		 */
281 		public NavPointStaticImpl(NavPoint original) {		
282 			
283 					this.Id = original.getId()
284  	;
285 				
286 					this.Item = original.getItem()
287  	;
288 				
289 					this.ItemClass = original.getItemClass()
290  	;
291 				
292 					this.Mover = original.getMover()
293  	;
294 				
295 					this.LiftOffset = original.getLiftOffset()
296  	;
297 				
298 					this.LiftJumpExit = original.isLiftJumpExit()
299  	;
300 				
301 					this.NoDoubleJump = original.isNoDoubleJump()
302  	;
303 				
304 					this.InvSpot = original.isInvSpot()
305  	;
306 				
307 					this.PlayerStart = original.isPlayerStart()
308  	;
309 				
310 					this.TeamNumber = original.getTeamNumber()
311  	;
312 				
313 					this.DomPoint = original.isDomPoint()
314  	;
315 				
316 					this.Door = original.isDoor()
317  	;
318 				
319 					this.LiftCenter = original.isLiftCenter()
320  	;
321 				
322 					this.LiftExit = original.isLiftExit()
323  	;
324 				
325 					this.AIMarker = original.isAIMarker()
326  	;
327 				
328 					this.JumpSpot = original.isJumpSpot()
329  	;
330 				
331 					this.JumpPad = original.isJumpPad()
332  	;
333 				
334 					this.JumpDest = original.isJumpDest()
335  	;
336 				
337 					this.Teleporter = original.isTeleporter()
338  	;
339 				
340 					this.Rotation = original.getRotation()
341  	;
342 				
343 					this.RoamingSpot = original.isRoamingSpot()
344  	;
345 				
346 					this.SnipingSpot = original.isSnipingSpot()
347  	;
348 				
349 					this.ItemInstance = original.getItemInstance()
350  	;
351 				
352 					this.OutgoingEdges = original.getOutgoingEdges()
353  	;
354 				
355 					this.IncomingEdges = original.getIncomingEdges()
356  	;
357 				
358 					this.PreferedWeapon = original.getPreferedWeapon()
359  	;
360 				
361 			this.SimTime = original.getSimTime();			
362 		}
363 		
364 		/**
365 		 * Cloning constructor from the full message.
366 		 *
367 		 * @param original
368 		 */
369 		public NavPointStaticImpl(NavPointStaticImpl original) {		
370 			
371 					this.Id = original.getId()
372  	;
373 				
374 					this.Item = original.getItem()
375  	;
376 				
377 					this.ItemClass = original.getItemClass()
378  	;
379 				
380 					this.Mover = original.getMover()
381  	;
382 				
383 					this.LiftOffset = original.getLiftOffset()
384  	;
385 				
386 					this.LiftJumpExit = original.isLiftJumpExit()
387  	;
388 				
389 					this.NoDoubleJump = original.isNoDoubleJump()
390  	;
391 				
392 					this.InvSpot = original.isInvSpot()
393  	;
394 				
395 					this.PlayerStart = original.isPlayerStart()
396  	;
397 				
398 					this.TeamNumber = original.getTeamNumber()
399  	;
400 				
401 					this.DomPoint = original.isDomPoint()
402  	;
403 				
404 					this.Door = original.isDoor()
405  	;
406 				
407 					this.LiftCenter = original.isLiftCenter()
408  	;
409 				
410 					this.LiftExit = original.isLiftExit()
411  	;
412 				
413 					this.AIMarker = original.isAIMarker()
414  	;
415 				
416 					this.JumpSpot = original.isJumpSpot()
417  	;
418 				
419 					this.JumpPad = original.isJumpPad()
420  	;
421 				
422 					this.JumpDest = original.isJumpDest()
423  	;
424 				
425 					this.Teleporter = original.isTeleporter()
426  	;
427 				
428 					this.Rotation = original.getRotation()
429  	;
430 				
431 					this.RoamingSpot = original.isRoamingSpot()
432  	;
433 				
434 					this.SnipingSpot = original.isSnipingSpot()
435  	;
436 				
437 					this.ItemInstance = original.getItemInstance()
438  	;
439 				
440 					this.OutgoingEdges = original.getOutgoingEdges()
441  	;
442 				
443 					this.IncomingEdges = original.getIncomingEdges()
444  	;
445 				
446 					this.PreferedWeapon = original.getPreferedWeapon()
447  	;
448 				
449 			this.SimTime = original.getSimTime();
450 		}
451 		
452 			/**
453 			 * Cloning constructor from the message part.
454 			 *
455 			 * @param original
456 			 */
457 			public NavPointStaticImpl(NavPointStatic original) {
458 				
459 						this.Id = original.getId()
460  	;
461 					
462 						this.Item = original.getItem()
463  	;
464 					
465 						this.ItemClass = original.getItemClass()
466  	;
467 					
468 						this.Mover = original.getMover()
469  	;
470 					
471 						this.LiftOffset = original.getLiftOffset()
472  	;
473 					
474 						this.LiftJumpExit = original.isLiftJumpExit()
475  	;
476 					
477 						this.NoDoubleJump = original.isNoDoubleJump()
478  	;
479 					
480 						this.InvSpot = original.isInvSpot()
481  	;
482 					
483 						this.PlayerStart = original.isPlayerStart()
484  	;
485 					
486 						this.TeamNumber = original.getTeamNumber()
487  	;
488 					
489 						this.DomPoint = original.isDomPoint()
490  	;
491 					
492 						this.Door = original.isDoor()
493  	;
494 					
495 						this.LiftCenter = original.isLiftCenter()
496  	;
497 					
498 						this.LiftExit = original.isLiftExit()
499  	;
500 					
501 						this.AIMarker = original.isAIMarker()
502  	;
503 					
504 						this.JumpSpot = original.isJumpSpot()
505  	;
506 					
507 						this.JumpPad = original.isJumpPad()
508  	;
509 					
510 						this.JumpDest = original.isJumpDest()
511  	;
512 					
513 						this.Teleporter = original.isTeleporter()
514  	;
515 					
516 						this.Rotation = original.getRotation()
517  	;
518 					
519 						this.RoamingSpot = original.isRoamingSpot()
520  	;
521 					
522 						this.SnipingSpot = original.isSnipingSpot()
523  	;
524 					
525 						this.ItemInstance = original.getItemInstance()
526  	;
527 					
528 						this.OutgoingEdges = original.getOutgoingEdges()
529  	;
530 					
531 						this.IncomingEdges = original.getIncomingEdges()
532  	;
533 					
534 						this.PreferedWeapon = original.getPreferedWeapon()
535  	;
536 					
537 			}
538 		
539    				
540    				@Override
541    				public void setSimTime(long SimTime) {
542 					super.setSimTime(SimTime);
543 				}
544    			
545 	    				@Override
546 	    				public 
547 	    				NavPointStaticImpl clone() {
548 	    					return new 
549 	    					NavPointStaticImpl(this);
550 	    				}
551 	    				
552 	    				
553     	
554 	    /**
555          * 
556 			A unique Id of this navigation point assigned by the game.
557 		 
558          */
559         protected
560          UnrealId Id =
561        	null;
562 	
563  		/**
564          * 
565 			A unique Id of this navigation point assigned by the game.
566 		 
567          */
568         public  UnrealId getId()
569  	 {
570 				    					return Id;
571 				    				}
572 				    			
573     	
574 	    /**
575          * 
576 			Unique Id of the respawned item (the item respawns at this
577 			point). Not sent if point is not an inventory spot. Sent only in HandShake.
578 		 
579          */
580         protected
581          UnrealId Item =
582        	null;
583 	
584  		/**
585          * 
586 			Unique Id of the respawned item (the item respawns at this
587 			point). Not sent if point is not an inventory spot. Sent only in HandShake.
588 		 
589          */
590         public  UnrealId getItem()
591  	 {
592 				    					return Item;
593 				    				}
594 				    			
595     	
596 	    /**
597          * 
598             Class of the item (e.g. xWeapons.FlakCannonPickup). Not sent if point is not an inventory spot. Sent only in HandShake.
599          
600          */
601         protected
602          ItemType ItemClass =
603        	null;
604 	
605  		/**
606          * 
607             Class of the item (e.g. xWeapons.FlakCannonPickup). Not sent if point is not an inventory spot. Sent only in HandShake.
608          
609          */
610         public  ItemType getItemClass()
611  	 {
612 				    					return ItemClass;
613 				    				}
614 				    			
615     	
616 	    /**
617          * 
618             If this NavPoint is marking some mover, the mover id will be here. Not sent if point is not a Door, a LiftCenter or a LiftExit. Sent only in HandShake.
619          
620          */
621         protected
622          UnrealId Mover =
623        	null;
624 	
625  		/**
626          * 
627             If this NavPoint is marking some mover, the mover id will be here. Not sent if point is not a Door, a LiftCenter or a LiftExit. Sent only in HandShake.
628          
629          */
630         public  UnrealId getMover()
631  	 {
632 				    					return Mover;
633 				    				}
634 				    			
635     	
636 	    /**
637          * 
638             Starting vector between MyLift location and LiftCenter location. Not sent if point is not a LiftCenter. Sent only in HandShake.
639          
640          */
641         protected
642          Vector3d LiftOffset =
643        	null;
644 	
645  		/**
646          * 
647             Starting vector between MyLift location and LiftCenter location. Not sent if point is not a LiftCenter. Sent only in HandShake.
648          
649          */
650         public  Vector3d getLiftOffset()
651  	 {
652 				    					return LiftOffset;
653 				    				}
654 				    			
655     	
656 	    /**
657          * 
658             Boolean. If we can/should exit the lift by a jump when near the destination place. Not sent if point is not a LiftExit. Sent only in HandShake.
659          
660          */
661         protected
662          boolean LiftJumpExit =
663        	false;
664 	
665  		/**
666          * 
667             Boolean. If we can/should exit the lift by a jump when near the destination place. Not sent if point is not a LiftExit. Sent only in HandShake.
668          
669          */
670         public  boolean isLiftJumpExit()
671  	 {
672 				    					return LiftJumpExit;
673 				    				}
674 				    			
675     	
676 	    /**
677          * 
678             Boolean. If we should or not use double jump when exiting lift with a jump. Not sent if point is not a LiftExit. Sent only in HandShake.
679          
680          */
681         protected
682          boolean NoDoubleJump =
683        	false;
684 	
685  		/**
686          * 
687             Boolean. If we should or not use double jump when exiting lift with a jump. Not sent if point is not a LiftExit. Sent only in HandShake.
688          
689          */
690         public  boolean isNoDoubleJump()
691  	 {
692 				    					return NoDoubleJump;
693 				    				}
694 				    			
695     	
696 	    /**
697          * 
698 			If this is an inventory spot (item is respawned at this point).
699 		 
700          */
701         protected
702          boolean InvSpot =
703        	false;
704 	
705  		/**
706          * 
707 			If this is an inventory spot (item is respawned at this point).
708 		 
709          */
710         public  boolean isInvSpot()
711  	 {
712 				    					return InvSpot;
713 				    				}
714 				    			
715     	
716 	    /**
717          * 
718 			If this is a player start (players and/or bots are respawned at this point).
719 		 
720          */
721         protected
722          boolean PlayerStart =
723        	false;
724 	
725  		/**
726          * 
727 			If this is a player start (players and/or bots are respawned at this point).
728 		 
729          */
730         public  boolean isPlayerStart()
731  	 {
732 				    					return PlayerStart;
733 				    				}
734 				    			
735     	
736 	    /**
737          * 
738 			Will be sent if this is a player start. In Team games (team deathmatch, capture the flag, domination) holds information about which team respawns at this player start spot. In non-team games will return 0!
739 		 
740          */
741         protected
742          int TeamNumber =
743        	0;
744 	
745  		/**
746          * 
747 			Will be sent if this is a player start. In Team games (team deathmatch, capture the flag, domination) holds information about which team respawns at this player start spot. In non-team games will return 0!
748 		 
749          */
750         public  int getTeamNumber()
751  	 {
752 				    					return TeamNumber;
753 				    				}
754 				    			
755     	
756 	    /**
757          * If this point marks a DominationPoint (for BotDoubleDomination game). 
758          */
759         protected
760          boolean DomPoint =
761        	false;
762 	
763  		/**
764          * If this point marks a DominationPoint (for BotDoubleDomination game). 
765          */
766         public  boolean isDomPoint()
767  	 {
768 				    					return DomPoint;
769 				    				}
770 				    			
771     	
772 	    /**
773          * 
774 			If this point marks a door mover.
775 		 
776          */
777         protected
778          boolean Door =
779        	false;
780 	
781  		/**
782          * 
783 			If this point marks a door mover.
784 		 
785          */
786         public  boolean isDoor()
787  	 {
788 				    					return Door;
789 				    				}
790 				    			
791     	
792 	    /**
793          * 
794 			If this point marks a lift center (used to mark center of a lift mover, note that this point will be always moved with the lift).
795 		 
796          */
797         protected
798          boolean LiftCenter =
799        	false;
800 	
801  		/**
802          * 
803 			If this point marks a lift center (used to mark center of a lift mover, note that this point will be always moved with the lift).
804 		 
805          */
806         public  boolean isLiftCenter()
807  	 {
808 				    					return LiftCenter;
809 				    				}
810 				    			
811     	
812 	    /**
813          * 
814 			If this point marks a lift exit (used to mark exit point of a lift mover).
815 		 
816          */
817         protected
818          boolean LiftExit =
819        	false;
820 	
821  		/**
822          * 
823 			If this point marks a lift exit (used to mark exit point of a lift mover).
824 		 
825          */
826         public  boolean isLiftExit()
827  	 {
828 				    					return LiftExit;
829 				    				}
830 				    			
831     	
832 	    /**
833          * 
834 			If this point is an AI marker - marks an interesting spot in the environment. May be ambush point or sniping spot, etc.
835 		 
836          */
837         protected
838          boolean AIMarker =
839        	false;
840 	
841  		/**
842          * 
843 			If this point is an AI marker - marks an interesting spot in the environment. May be ambush point or sniping spot, etc.
844 		 
845          */
846         public  boolean isAIMarker()
847  	 {
848 				    					return AIMarker;
849 				    				}
850 				    			
851     	
852 	    /**
853          * 
854 			If this point marks a jump spot (a special device that causes the bot to jump high or far).
855 		 
856          */
857         protected
858          boolean JumpSpot =
859        	false;
860 	
861  		/**
862          * 
863 			If this point marks a jump spot (a special device that causes the bot to jump high or far).
864 		 
865          */
866         public  boolean isJumpSpot()
867  	 {
868 				    					return JumpSpot;
869 				    				}
870 				    			
871     	
872 	    /**
873          * 
874 			If this point marks a jump pad (a special device that causes the bot to jump high or far).
875 		 
876          */
877         protected
878          boolean JumpPad =
879        	false;
880 	
881  		/**
882          * 
883 			If this point marks a jump pad (a special device that causes the bot to jump high or far).
884 		 
885          */
886         public  boolean isJumpPad()
887  	 {
888 				    					return JumpPad;
889 				    				}
890 				    			
891     	
892 	    /**
893          * 
894 			If this point marks a jump destination - some place that can be reached by some special jump.
895 		 
896          */
897         protected
898          boolean JumpDest =
899        	false;
900 	
901  		/**
902          * 
903 			If this point marks a jump destination - some place that can be reached by some special jump.
904 		 
905          */
906         public  boolean isJumpDest()
907  	 {
908 				    					return JumpDest;
909 				    				}
910 				    			
911     	
912 	    /**
913          * 
914 			If this point marks a teleport. 
915 		 
916          */
917         protected
918          boolean Teleporter =
919        	false;
920 	
921  		/**
922          * 
923 			If this point marks a teleport. 
924 		 
925          */
926         public  boolean isTeleporter()
927  	 {
928 				    					return Teleporter;
929 				    				}
930 				    			
931     	
932 	    /**
933          * 
934 			If the type is AIMarker. The rotation the bot should be
935 			facing, when doing the action specified by AIMarker. Sent only in HandShake.
936 		 
937          */
938         protected
939          Rotation Rotation =
940        	null;
941 	
942  		/**
943          * 
944 			If the type is AIMarker. The rotation the bot should be
945 			facing, when doing the action specified by AIMarker. Sent only in HandShake.
946 		 
947          */
948         public  Rotation getRotation()
949  	 {
950 				    					return Rotation;
951 				    				}
952 				    			
953     	
954 	    /**
955          * 
956 			Some ambush point, where is good chance to intercept
957 			approaching opponents. Sent only in HandShake.
958 		 
959          */
960         protected
961          boolean RoamingSpot =
962        	false;
963 	
964  		/**
965          * 
966 			Some ambush point, where is good chance to intercept
967 			approaching opponents. Sent only in HandShake.
968 		 
969          */
970         public  boolean isRoamingSpot()
971  	 {
972 				    					return RoamingSpot;
973 				    				}
974 				    			
975     	
976 	    /**
977          * Point good for sniping. Sent only in HandShake. 
978          */
979         protected
980          boolean SnipingSpot =
981        	false;
982 	
983  		/**
984          * Point good for sniping. Sent only in HandShake. 
985          */
986         public  boolean isSnipingSpot()
987  	 {
988 				    					return SnipingSpot;
989 				    				}
990 				    			
991     	
992 	    /**
993          * If item should be present at this navpoint it's instance will be here. 
994          */
995         protected
996          Item ItemInstance =
997        	null;
998 	
999  		/**
1000          * If item should be present at this navpoint it's instance will be here. 
1001          */
1002         public  Item getItemInstance()
1003  	 {
1004 				    					return ItemInstance;
1005 				    				}
1006 				    			
1007     	
1008 	    /**
1009          * Maps edge-LEADING_TO-navpoint-UnrealId to neighbour link, those are outgoing edges (those edges that originates in this navpoint going to another one, those you may usually travel). 
1010          */
1011         protected
1012          Map<UnrealId, NavPointNeighbourLink> OutgoingEdges =
1013        	new HashMap<UnrealId, NavPointNeighbourLink>();
1014 	
1015  		/**
1016          * Maps edge-LEADING_TO-navpoint-UnrealId to neighbour link, those are outgoing edges (those edges that originates in this navpoint going to another one, those you may usually travel). 
1017          */
1018         public  Map<UnrealId, NavPointNeighbourLink> getOutgoingEdges()
1019  	 {
1020 				    					return OutgoingEdges;
1021 				    				}
1022 				    			
1023     	
1024 	    /**
1025          * Maps edge-ORIGINATES_FROM-navpoint-UnrealId to neighbour link, those are incoming edges (those edges that originates in different navpoint and ends here, do not use this to ask whether you can get to navpoint of specific unreal id, use OutgoingEdges instead). 
1026          */
1027         protected
1028          Map<UnrealId, NavPointNeighbourLink> IncomingEdges =
1029        	new HashMap<UnrealId, NavPointNeighbourLink>();
1030 	
1031  		/**
1032          * Maps edge-ORIGINATES_FROM-navpoint-UnrealId to neighbour link, those are incoming edges (those edges that originates in different navpoint and ends here, do not use this to ask whether you can get to navpoint of specific unreal id, use OutgoingEdges instead). 
1033          */
1034         public  Map<UnrealId, NavPointNeighbourLink> getIncomingEdges()
1035  	 {
1036 				    					return IncomingEdges;
1037 				    				}
1038 				    			
1039     	
1040 	    /**
1041          * 
1042 			Class of the weapon that should be prefered when using this
1043 			point for AIMarker specified action. Sent only in HandShake.
1044 		 
1045          */
1046         protected
1047          String PreferedWeapon =
1048        	null;
1049 	
1050  		/**
1051          * 
1052 			Class of the weapon that should be prefered when using this
1053 			point for AIMarker specified action. Sent only in HandShake.
1054 		 
1055          */
1056         public  String getPreferedWeapon()
1057  	 {
1058 				    					return PreferedWeapon;
1059 				    				}
1060 				    			
1061     	
1062     	
1063     	public static class NavPointStaticUpdate
1064      implements IStaticWorldObjectUpdatedEvent
1065 		{
1066 			
1067 			private NavPointStatic data;
1068 			private long time;
1069 			
1070 			public NavPointStaticUpdate
1071     (NavPointStatic source, long time)
1072 			{
1073 				this.data = source;
1074 				this.time = time;
1075 			}
1076 			
1077 			/**
1078 			 * Simulation time in MILLI SECONDS !!!
1079 			 */
1080 			@Override
1081 			public long getSimTime() {
1082 				return time;
1083 			}
1084 	
1085 			@Override
1086 			public WorldObjectId getId() {
1087 				return data.getId();
1088 			}
1089 			
1090 			@Override
1091 			public IWorldObjectUpdateResult<IStaticWorldObject> update(
1092 					IStaticWorldObject object) {
1093 				if ( object == null)
1094 				{
1095 					data = new NavPointStaticImpl(data);
1096 					return new IWorldObjectUpdateResult.WorldObjectUpdateResult<IStaticWorldObject>(IWorldObjectUpdateResult.Result.CREATED, data);
1097 				}
1098 				//since static objects can't be updated, we'll just check that the object stays the same
1099 				if ( object instanceof NavPointStaticImpl)
1100 				{
1101 					NavPointStaticImpl orig = (NavPointStaticImpl)object;
1102 					//since these errors usually mean error in gamebots, we will just print an error message
1103 					if ( data.isDifferentFrom(orig) )
1104 					{
1105 						//data.isDifferentFrom(orig);
1106 						//throw new PogamutException("Trying to modify static object " + this.data.getId().toString() , this);
1107 						System.out.println("!!!!!ERROR!!!!!! in static object modification. Object class : NavPointStaticImpl to see which property was different see !!!!PROPERTY UPDATE ERROR!!!!");
1108 					}
1109 					return new IWorldObjectUpdateResult.WorldObjectUpdateResult<IStaticWorldObject>(IWorldObjectUpdateResult.Result.SAME, data);
1110 				}				
1111 				throw new PogamutException("Unexpected object type for update, NavPointStaticImpl expected not class " + object.getClass().getSimpleName() + ".", this);
1112 			}
1113 		}
1114 	
1115     
1116  		
1117  		@Override
1118  		public boolean isDifferentFrom(IStaticWorldObject other)
1119  		{
1120  			if (other == null) //early fail
1121  			{
1122  				return true;
1123  			}
1124  			else if (other == this) //early out
1125  			{
1126  				return false;
1127  			}
1128  			else
1129  			{
1130  				NavPointStatic obj = (NavPointStatic) other;
1131 
1132  				
1133  						if ( !(
1134  	 			AdvancedEquals.equalsOrNull(this.getId()
1135  	, obj.getId()
1136  	)
1137  	 		) )
1138 						{
1139 							System.out.println("!!!!!PROPERTY UPDATE ERROR!!!! on property Id on object class NavPointStatic");
1140 							return true;
1141 						}
1142  					
1143  						if ( !(
1144  	 			AdvancedEquals.equalsOrNull(this.getItem()
1145  	, obj.getItem()
1146  	)
1147  	 		) )
1148 						{
1149 							System.out.println("!!!!!PROPERTY UPDATE ERROR!!!! on property Item on object class NavPointStatic");
1150 							return true;
1151 						}
1152  					
1153  						if ( !(
1154  	 			AdvancedEquals.equalsOrNull(this.getItemClass()
1155  	, obj.getItemClass()
1156  	)
1157  	 		) )
1158 						{
1159 							System.out.println("!!!!!PROPERTY UPDATE ERROR!!!! on property ItemClass on object class NavPointStatic");
1160 							return true;
1161 						}
1162  					
1163  						if ( !(
1164  	 			AdvancedEquals.equalsOrNull(this.getMover()
1165  	, obj.getMover()
1166  	)
1167  	 		) )
1168 						{
1169 							System.out.println("!!!!!PROPERTY UPDATE ERROR!!!! on property Mover on object class NavPointStatic");
1170 							return true;
1171 						}
1172  					
1173  						if ( !(
1174  	 			AdvancedEquals.equalsOrNull(this.getLiftOffset()
1175  	, obj.getLiftOffset()
1176  	)
1177  	 		) )
1178 						{
1179 							System.out.println("!!!!!PROPERTY UPDATE ERROR!!!! on property LiftOffset on object class NavPointStatic");
1180 							return true;
1181 						}
1182  					
1183  						if ( !(this.isLiftJumpExit()
1184  	
1185  	 			== obj.isLiftJumpExit()
1186  	) )
1187 						{
1188 							System.out.println("!!!!!PROPERTY UPDATE ERROR!!!! on property LiftJumpExit on object class NavPointStatic");
1189 							return true;
1190 						}
1191  					
1192  						if ( !(this.isNoDoubleJump()
1193  	
1194  	 			== obj.isNoDoubleJump()
1195  	) )
1196 						{
1197 							System.out.println("!!!!!PROPERTY UPDATE ERROR!!!! on property NoDoubleJump on object class NavPointStatic");
1198 							return true;
1199 						}
1200  					
1201  						if ( !(this.isInvSpot()
1202  	
1203  	 			== obj.isInvSpot()
1204  	) )
1205 						{
1206 							System.out.println("!!!!!PROPERTY UPDATE ERROR!!!! on property InvSpot on object class NavPointStatic");
1207 							return true;
1208 						}
1209  					
1210  						if ( !(this.isPlayerStart()
1211  	
1212  	 			== obj.isPlayerStart()
1213  	) )
1214 						{
1215 							System.out.println("!!!!!PROPERTY UPDATE ERROR!!!! on property PlayerStart on object class NavPointStatic");
1216 							return true;
1217 						}
1218  					
1219  						if ( !(this.getTeamNumber()
1220  	
1221  	 			== obj.getTeamNumber()
1222  	) )
1223 						{
1224 							System.out.println("!!!!!PROPERTY UPDATE ERROR!!!! on property TeamNumber on object class NavPointStatic");
1225 							return true;
1226 						}
1227  					
1228  						if ( !(this.isDomPoint()
1229  	
1230  	 			== obj.isDomPoint()
1231  	) )
1232 						{
1233 							System.out.println("!!!!!PROPERTY UPDATE ERROR!!!! on property DomPoint on object class NavPointStatic");
1234 							return true;
1235 						}
1236  					
1237  						if ( !(this.isDoor()
1238  	
1239  	 			== obj.isDoor()
1240  	) )
1241 						{
1242 							System.out.println("!!!!!PROPERTY UPDATE ERROR!!!! on property Door on object class NavPointStatic");
1243 							return true;
1244 						}
1245  					
1246  						if ( !(this.isLiftCenter()
1247  	
1248  	 			== obj.isLiftCenter()
1249  	) )
1250 						{
1251 							System.out.println("!!!!!PROPERTY UPDATE ERROR!!!! on property LiftCenter on object class NavPointStatic");
1252 							return true;
1253 						}
1254  					
1255  						if ( !(this.isLiftExit()
1256  	
1257  	 			== obj.isLiftExit()
1258  	) )
1259 						{
1260 							System.out.println("!!!!!PROPERTY UPDATE ERROR!!!! on property LiftExit on object class NavPointStatic");
1261 							return true;
1262 						}
1263  					
1264  						if ( !(this.isAIMarker()
1265  	
1266  	 			== obj.isAIMarker()
1267  	) )
1268 						{
1269 							System.out.println("!!!!!PROPERTY UPDATE ERROR!!!! on property AIMarker on object class NavPointStatic");
1270 							return true;
1271 						}
1272  					
1273  						if ( !(this.isJumpSpot()
1274  	
1275  	 			== obj.isJumpSpot()
1276  	) )
1277 						{
1278 							System.out.println("!!!!!PROPERTY UPDATE ERROR!!!! on property JumpSpot on object class NavPointStatic");
1279 							return true;
1280 						}
1281  					
1282  						if ( !(this.isJumpPad()
1283  	
1284  	 			== obj.isJumpPad()
1285  	) )
1286 						{
1287 							System.out.println("!!!!!PROPERTY UPDATE ERROR!!!! on property JumpPad on object class NavPointStatic");
1288 							return true;
1289 						}
1290  					
1291  						if ( !(this.isJumpDest()
1292  	
1293  	 			== obj.isJumpDest()
1294  	) )
1295 						{
1296 							System.out.println("!!!!!PROPERTY UPDATE ERROR!!!! on property JumpDest on object class NavPointStatic");
1297 							return true;
1298 						}
1299  					
1300  						if ( !(this.isTeleporter()
1301  	
1302  	 			== obj.isTeleporter()
1303  	) )
1304 						{
1305 							System.out.println("!!!!!PROPERTY UPDATE ERROR!!!! on property Teleporter on object class NavPointStatic");
1306 							return true;
1307 						}
1308  					
1309  						if ( !(
1310  	 			AdvancedEquals.equalsOrNull(this.getRotation()
1311  	, obj.getRotation()
1312  	)
1313  	 		) )
1314 						{
1315 							System.out.println("!!!!!PROPERTY UPDATE ERROR!!!! on property Rotation on object class NavPointStatic");
1316 							return true;
1317 						}
1318  					
1319  						if ( !(this.isRoamingSpot()
1320  	
1321  	 			== obj.isRoamingSpot()
1322  	) )
1323 						{
1324 							System.out.println("!!!!!PROPERTY UPDATE ERROR!!!! on property RoamingSpot on object class NavPointStatic");
1325 							return true;
1326 						}
1327  					
1328  						if ( !(this.isSnipingSpot()
1329  	
1330  	 			== obj.isSnipingSpot()
1331  	) )
1332 						{
1333 							System.out.println("!!!!!PROPERTY UPDATE ERROR!!!! on property SnipingSpot on object class NavPointStatic");
1334 							return true;
1335 						}
1336  					
1337  						if ( !(
1338  	 			AdvancedEquals.equalsOrNull(this.getItemInstance()
1339  	, obj.getItemInstance()
1340  	)
1341  	 		) )
1342 						{
1343 							System.out.println("!!!!!PROPERTY UPDATE ERROR!!!! on property ItemInstance on object class NavPointStatic");
1344 							return true;
1345 						}
1346  					
1347  						//Skipping outgoing and incoming edges tests because the navGraph is sent only once
1348  					
1349  						//Skipping outgoing and incoming edges tests because the navGraph is sent only once
1350  					
1351  						if ( !(
1352  	 			AdvancedEquals.equalsOrNull(this.getPreferedWeapon()
1353  	, obj.getPreferedWeapon()
1354  	)
1355  	 		) )
1356 						{
1357 							System.out.println("!!!!!PROPERTY UPDATE ERROR!!!! on property PreferedWeapon on object class NavPointStatic");
1358 							return true;
1359 						}
1360  					
1361  			}
1362  			return false;
1363  		}
1364  	 
1365  		
1366  	    public String toString() {
1367             return
1368             	super.toString() + "[" +
1369             	
1370 		              			"Id = " + String.valueOf(getId()
1371  	) + " | " + 
1372 		              		
1373 		              			"Item = " + String.valueOf(getItem()
1374  	) + " | " + 
1375 		              		
1376 		              			"ItemClass = " + String.valueOf(getItemClass()
1377  	) + " | " + 
1378 		              		
1379 		              			"Mover = " + String.valueOf(getMover()
1380  	) + " | " + 
1381 		              		
1382 		              			"LiftOffset = " + String.valueOf(getLiftOffset()
1383  	) + " | " + 
1384 		              		
1385 		              			"LiftJumpExit = " + String.valueOf(isLiftJumpExit()
1386  	) + " | " + 
1387 		              		
1388 		              			"NoDoubleJump = " + String.valueOf(isNoDoubleJump()
1389  	) + " | " + 
1390 		              		
1391 		              			"InvSpot = " + String.valueOf(isInvSpot()
1392  	) + " | " + 
1393 		              		
1394 		              			"PlayerStart = " + String.valueOf(isPlayerStart()
1395  	) + " | " + 
1396 		              		
1397 		              			"TeamNumber = " + String.valueOf(getTeamNumber()
1398  	) + " | " + 
1399 		              		
1400 		              			"DomPoint = " + String.valueOf(isDomPoint()
1401  	) + " | " + 
1402 		              		
1403 		              			"Door = " + String.valueOf(isDoor()
1404  	) + " | " + 
1405 		              		
1406 		              			"LiftCenter = " + String.valueOf(isLiftCenter()
1407  	) + " | " + 
1408 		              		
1409 		              			"LiftExit = " + String.valueOf(isLiftExit()
1410  	) + " | " + 
1411 		              		
1412 		              			"AIMarker = " + String.valueOf(isAIMarker()
1413  	) + " | " + 
1414 		              		
1415 		              			"JumpSpot = " + String.valueOf(isJumpSpot()
1416  	) + " | " + 
1417 		              		
1418 		              			"JumpPad = " + String.valueOf(isJumpPad()
1419  	) + " | " + 
1420 		              		
1421 		              			"JumpDest = " + String.valueOf(isJumpDest()
1422  	) + " | " + 
1423 		              		
1424 		              			"Teleporter = " + String.valueOf(isTeleporter()
1425  	) + " | " + 
1426 		              		
1427 		              			"Rotation = " + String.valueOf(getRotation()
1428  	) + " | " + 
1429 		              		
1430 		              			"RoamingSpot = " + String.valueOf(isRoamingSpot()
1431  	) + " | " + 
1432 		              		
1433 		              			"SnipingSpot = " + String.valueOf(isSnipingSpot()
1434  	) + " | " + 
1435 		              		
1436 		              			"PreferedWeapon = " + String.valueOf(getPreferedWeapon()
1437  	) + " | " + 
1438 		              		
1439 				"]";           		
1440         }
1441  	
1442  		
1443  		public String toHtmlString() {
1444  			return super.toString() + "[<br/>" +
1445             	
1446 		              			"<b>Id</b> = " + String.valueOf(getId()
1447  	) + " <br/> " + 
1448 		              		
1449 		              			"<b>Item</b> = " + String.valueOf(getItem()
1450  	) + " <br/> " + 
1451 		              		
1452 		              			"<b>ItemClass</b> = " + String.valueOf(getItemClass()
1453  	) + " <br/> " + 
1454 		              		
1455 		              			"<b>Mover</b> = " + String.valueOf(getMover()
1456  	) + " <br/> " + 
1457 		              		
1458 		              			"<b>LiftOffset</b> = " + String.valueOf(getLiftOffset()
1459  	) + " <br/> " + 
1460 		              		
1461 		              			"<b>LiftJumpExit</b> = " + String.valueOf(isLiftJumpExit()
1462  	) + " <br/> " + 
1463 		              		
1464 		              			"<b>NoDoubleJump</b> = " + String.valueOf(isNoDoubleJump()
1465  	) + " <br/> " + 
1466 		              		
1467 		              			"<b>InvSpot</b> = " + String.valueOf(isInvSpot()
1468  	) + " <br/> " + 
1469 		              		
1470 		              			"<b>PlayerStart</b> = " + String.valueOf(isPlayerStart()
1471  	) + " <br/> " + 
1472 		              		
1473 		              			"<b>TeamNumber</b> = " + String.valueOf(getTeamNumber()
1474  	) + " <br/> " + 
1475 		              		
1476 		              			"<b>DomPoint</b> = " + String.valueOf(isDomPoint()
1477  	) + " <br/> " + 
1478 		              		
1479 		              			"<b>Door</b> = " + String.valueOf(isDoor()
1480  	) + " <br/> " + 
1481 		              		
1482 		              			"<b>LiftCenter</b> = " + String.valueOf(isLiftCenter()
1483  	) + " <br/> " + 
1484 		              		
1485 		              			"<b>LiftExit</b> = " + String.valueOf(isLiftExit()
1486  	) + " <br/> " + 
1487 		              		
1488 		              			"<b>AIMarker</b> = " + String.valueOf(isAIMarker()
1489  	) + " <br/> " + 
1490 		              		
1491 		              			"<b>JumpSpot</b> = " + String.valueOf(isJumpSpot()
1492  	) + " <br/> " + 
1493 		              		
1494 		              			"<b>JumpPad</b> = " + String.valueOf(isJumpPad()
1495  	) + " <br/> " + 
1496 		              		
1497 		              			"<b>JumpDest</b> = " + String.valueOf(isJumpDest()
1498  	) + " <br/> " + 
1499 		              		
1500 		              			"<b>Teleporter</b> = " + String.valueOf(isTeleporter()
1501  	) + " <br/> " + 
1502 		              		
1503 		              			"<b>Rotation</b> = " + String.valueOf(getRotation()
1504  	) + " <br/> " + 
1505 		              		
1506 		              			"<b>RoamingSpot</b> = " + String.valueOf(isRoamingSpot()
1507  	) + " <br/> " + 
1508 		              		
1509 		              			"<b>SnipingSpot</b> = " + String.valueOf(isSnipingSpot()
1510  	) + " <br/> " + 
1511 		              		
1512 		              			"<b>PreferedWeapon</b> = " + String.valueOf(getPreferedWeapon()
1513  	) + " <br/> " + 
1514 		              		
1515 				"<br/>]";     
1516 		}
1517  	
1518  		
1519  		// --- Extra Java from XML BEGIN (extra/code/java/javapart/classcategory[@name=all]) ---
1520         	
1521 		// --- Extra Java from XML END (extra/code/java/javapart/classcategory[@name=all]) ---
1522 		
1523 	    // --- Extra Java from XML BEGIN (extra/code/java/javapart/classcategory[@name=static+classtype[@name=impl]) ---
1524 	                
1525          	  
1526          		    
1527          		    
1528          	            		   	
1529          	  
1530          		    
1531          		    
1532          	  
1533          	/**
1534 		     * DO NOT USE THIS METHOD! Reserved for GaviaLib (Pogamut core)! It's used
1535 		     * to set correct item instance into the NavPoint.
1536 		     */  	
1537 		    public void setItemInstance(Item item) {
1538 		        this.ItemInstance = item;
1539 		        if (item != null) {
1540 		        	this.Item = item.getId();
1541 		        }
1542 		    } 	
1543 		
1544 	    // --- Extra Java from XML END (extra/code/java/javapart/classcategory[@name=static+classtype[@name=impl]) ---        	            	
1545  	
1546 		}
1547