awips2/pythonPackages/java-importer/JavaImporter.py

110 lines
3.5 KiB
Python
Raw Normal View History

##############################################################################
# COPYRIGHT (c), 2009, RAYTHEON COMPANY
# ALL RIGHTS RESERVED, An Unpublished Work
#
# RAYTHEON PROPRIETARY
# If the end user is not the U.S. Government or any agency thereof, use
# or disclosure of data contained in this source code file is subject to
# the proprietary restrictions set forth in the Master Rights File.
#
# U.S. GOVERNMENT PURPOSE RIGHTS NOTICE
# If the end user is the U.S. Government or any agency thereof, this source
# code is provided to the U.S. Government with Government Purpose Rights.
# Use or disclosure of data contained in this source code file is subject to
# the "Government Purpose Rights" restriction in the Master Rights File.
#
# U.S. EXPORT CONTROLLED TECHNICAL DATA
# Use or disclosure of data contained in this source code file is subject to
# the export restrictions set forth in the Master Rights File.
##############################################################################
#
# Python import hook (PEP 302) for importing Java classes through JEP
#
#
# SOFTWARE HISTORY
#
# Date Ticket# Engineer Description
# ------------ ---------- ----------- --------------------------
# 12/03/09 njensen Initial Creation.
#
#
#
import sys, types
import jep
PACKAGES = [
'java',
'com',
'gov',
'org',
'net',
'edu',
]
class JavaImporter:
def __init__(self):
pass
def find_module(self, fullname, path=None):
found = False
for p in PACKAGES:
if fullname.startswith(p):
found = True
break
if not found:
return None
return self
def load_module(self, fullname):
split = fullname.split('.')
parentModule = None
size = len(split)
for i in range(size):
s = split[i]
if not parentModule:
if sys.modules.has_key(s):
parentModule = sys.modules[s]
else:
mod = sys.modules.setdefault(s, JavaModule(s))
mod.__loader__ = self
mod = sys.modules[s]
parentModule = mod
else:
attr = None
try:
attr = parentModule.__getattribute__(s)
except AttributeError:
pass
if attr:
parentModule = attr
else:
if s[0].islower(): # it's still part of the package name
mod = JavaModule(s)
mod.__loader__ = self
parentModule.__setattr__(s, mod)
parentModule = mod
else: # it's a java class, add it
jclz = jep.jimport(fullname)
parentModule.__setattr__(s, jclz)
parentModule = jclz
return parentModule
class JavaModule(types.ModuleType):
def __getattribute__(self, attr):
if attr == '__path__':
return 'java'
else:
return types.ModuleType.__getattribute__(self, attr)
sys.modules['JavaImporter'] = sys.modules[__name__]
sys.meta_path[:] = [JavaImporter()]