private void processComponentXML(Bundle bundle, String action) throws CarbonException {
if (bundleContext.getBundle() == bundle) {
return;
}
Component component = ComponentBuilder.build(bundle, bundleContext);
if (component == null) {
return;
} else {
ServiceReference reference = bundleContext.getServiceReference(CarbonUIDefinitions.class.getName());
CarbonUIDefinitions carbonUIDefinitions = null;
if (reference != null) {
carbonUIDefinitions = (CarbonUIDefinitions) bundleContext.getService(reference);
}
if (carbonUIDefinitions != null) {
if (log.isDebugEnabled()) {
log.debug("Found carbonUIDefinitions in OSGi context");
}
carbonUIDefinitions.setMenuDefinitions(component.getMenus(), action);
carbonUIDefinitions.setServletDefinitions(component.getServlets(), action);
carbonUIDefinitions.addUnauthenticatedUrls(component.getUnauthenticatedUrlList());
carbonUIDefinitions.addSkipTilesUrls(component.getSkipTilesUrlList());
carbonUIDefinitions.addHttpUrls(component.getSkipHttpsUrlList());
carbonUIDefinitions.addContexts(component.getContextsList());
} else {
if (log.isDebugEnabled()) {
log.debug("CarbonUIDefinitions is NULL. Registering new...");
}
carbonUIDefinitions = new CarbonUIDefinitions();
carbonUIDefinitions.setMenuDefinitions(component.getMenus(), action);
carbonUIDefinitions.setServletDefinitions(component.getServlets(), action);
carbonUIDefinitions.addUnauthenticatedUrls(component.getUnauthenticatedUrlList());
carbonUIDefinitions.addSkipTilesUrls(component.getSkipTilesUrlList());
carbonUIDefinitions.addHttpUrls(component.getSkipHttpsUrlList());
carbonUIDefinitions.addContexts(component.getContextsList());
bundleContext.registerService(CarbonUIDefinitions.class.getName(), carbonUIDefinitions, null);
}
}
//processing servlet definitions
if (component != null
&& component.getServlets() != null
&& component.getServlets().length > 0) {
HttpService httpService;
try {
httpService = CarbonUIServiceComponent.getHttpService();
} catch (Exception e) {
throw new CarbonException("An instance of HttpService is not available");
}
org.wso2.carbon.ui.deployment.beans.Servlet[] servletDefinitions = component.getServlets();
for (int a = 0; a < servletDefinitions.length; a++) {
org.wso2.carbon.ui.deployment.beans.Servlet servlet = servletDefinitions[a];
if (log.isTraceEnabled()) {
log.trace("Registering sevlet : " + servlet);
}
try {
Class clazz = Class.forName(servlet.getServletClass());
//TODO : allow servlet parameters to be passed
Dictionary params = new Hashtable();
httpService.registerServlet(servlet.getUrlPatten(),
(Servlet) clazz.newInstance(), params,
httpContext);
} catch (ClassNotFoundException e) {
log.error("Servlet class : " + servlet.getServletClass() + " not found.", e);
} catch (ServletException e) {
log.error("Problem registering Servlet class : " + servlet.getServletClass() + ".", e);
} catch (NamespaceException e) {
log.error("Problem registering Servlet class : " + servlet.getServletClass() + ".", e);
} catch (InstantiationException e) {
log.error("Problem registering Servlet class : " + servlet.getServletClass() + ".", e);
} catch (IllegalAccessException e) {
log.error("Problem registering Servlet class : " + servlet.getServletClass() + ".", e);
}
}
}
// processing the custom UI definitions required by Registry
if (component != null) {
ServiceReference reference =
bundleContext.getServiceReference(CustomUIDefenitions.class.getName());
CustomUIDefenitions customUIDefenitions = null;
if (reference != null) {
customUIDefenitions = (CustomUIDefenitions) bundleContext.getService(reference);
}
if (customUIDefenitions == null) {
String msg = "Custom UI defenitions service is not available.";
log.error(msg);
throw new CarbonException(msg);
}
Iterator<String> viewMediaTypes = component.getCustomViewUIMap().keySet().iterator();
while (viewMediaTypes.hasNext()) {
String mediaType = viewMediaTypes.next();
String uiPath = component.getCustomViewUIMap().get(mediaType);
if (customUIDefenitions.getCustomViewUI(mediaType) == null) {
customUIDefenitions.addCustomViewUI(mediaType, uiPath);
if (log.isDebugEnabled()) {
log.debug("Registered the custom view UI media type: " + mediaType + ", UI path: " + uiPath);
}
} else {
String msg = "Custom view UI is already registered for media type: " + mediaType +
". Custom UI with media type: " + mediaType + " and UI path: " +
uiPath + " will not be registered.";
log.error(msg);
}
}
Iterator<String> addMediaTypes = component.getCustomAddUIMap().keySet().iterator();
while (addMediaTypes.hasNext()) {
String mediaType = addMediaTypes.next();
String uiPath = component.getCustomAddUIMap().get(mediaType);
if (customUIDefenitions.getCustomAddUI(mediaType) == null) {
customUIDefenitions.addCustomAddUI(mediaType, uiPath);
if (log.isDebugEnabled()) {
log.debug("Registered the custom add UI media type: " + mediaType + ", UI path: " + uiPath);
}
} else {
String msg = "Custom add UI is already registered for media type: " + mediaType +
". Custom UI with media type: " + mediaType + " and UI path: " +
uiPath + " will not be registered.";
log.error(msg);
}
}
}
//This functionality can be moved to a new method
if (component.getFileUploadExecutorConfigs() != null
&& component.getFileUploadExecutorConfigs().length > 0) {
FileUploadExecutorManager executorManager = (FileUploadExecutorManager) fileUploadExecManagerTracker.getService();
if (executorManager == null) {
log.error("FileUploadExecutorManager service is not available");
return;
}
FileUploadExecutorConfig[] executorConfigs = component.getFileUploadExecutorConfigs();
for (FileUploadExecutorConfig executorConfig : executorConfigs) {
String[] mappingActions = executorConfig.getMappingActionList();
for (String mappingAction : mappingActions) {
if (CarbonConstants.ADD_UI_COMPONENT.equals(action)) {
executorManager.addExecutor(mappingAction, executorConfig.getFUploadExecClass());