if (parentPortlet == null) {
if (getTMLContext().isbotrequest()) {
throw new TMLSilentCancelException();
}
else {
throw new TMLException("Current user has no portlet registration");
}
}
String pKey = getKey();
String pName = getName();
// If no key direcly given try to fetch via portlet name
if (pKey == null && pName != null) {
pKey = parentPortlet.getPortletKeyForName(pName);
}
// Fetch registration info if key provided
WGPortlet pReg = null;
if (pKey != null) {
pReg = parentPortlet.getPortletRegistration(pKey);
}
// If reg not retrievable and auto registration info available try auto registration, else cancel
if (pReg == null) {
if (pName != null && status.ref != null) {
pKey = parentPortlet.registerportletforname(pName, status.designdb, status.ref, false);
pReg = parentPortlet.getPortletRegistration(pKey);
}
else {
if (pName != null) {
throw new TMLException("Portlet name not registered: " + pName, true);
}
else if (pKey != null) {
throw new TMLException("Portlet key not registered: " + pKey, true);
}
else {
throw new TMLException("No portlet key provided.", true);
}
}
}
// Check if registration matchtes the autoregister TML. If not, reregister with the given TML.
else if (status.ref != null) {
// If the registration has no design database specified we take the current design db (which is always equal)
if (pReg.getDesignDb() == null) {
pReg.setDesignDb(status.designdb);
}
if (!WGUtils.nullSafeEquals(status.ref, pReg.getDesign(), true) ||
(!WGUtils.nullSafeEquals(status.designdb, pReg.getDesignDb(), true))) {
pKey = parentPortlet.registerportletforname(pName, status.designdb, status.ref, true);
pReg = parentPortlet.getPortletRegistration(pKey);
}
}
// Prepare environment
status.setOption(Base.OPTION_PORTLET_NAMESPACE, pKey, null);
if (pReg.getDesignDb() != null) {
status.designdb = pReg.getDesignDb();
}
status.ref = getTMLContext().resolveDesignReference(pReg.getDesign());
// Update portlet event index information
TMLPortlet childPortlet = getTMLContext().getportlet();
childPortlet.prepareEventProcessing(this);
// set child tag context to portlet context if set
TMLContext portletContext = childPortlet.getcontext();
if (portletContext != null) {
setChildTagContext(portletContext);
}
// if ajax enabled
if (status.ajax) {
String uniquePortletID = pReg.getKey();
// create prefix buffer
StringBuffer prefix = new StringBuffer();
// create suffix buffer
StringBuffer suffix = new StringBuffer();
// set id as option, so tags from included module can retrieve it for rendering ajaxCall
status.setOption(OPTION_AJAX_DIVTAG_ID, uniquePortletID, null);
// set tmlModule as option, so tags from included module can retrieve the tmlmodulename
status.setOption(OPTION_PORTLET_TMLMODULE, pReg.getDesign(), null);
// create ajaxInfo
AjaxInfo ajaxInfo = new AjaxInfo(uniquePortletID);
try {
URLBuilder builder = new URLBuilder(getTMLContext().getrequest());
builder.removeParameter("$action");
java.net.URL url = builder.rebuild();
ajaxInfo.setQueryString(url.getQuery());
} catch (Exception e1) {
getTMLContext().addwarning("Unable to build request querystring for ajax environment.");
}
ajaxInfo.setTmlmodule(pReg.getDesign());
ajaxInfo.setDesignDB(pReg.getDesignDb() != null ? pReg.getDesignDb() : getDesigndb());
ajaxInfo.setMediaKey((String)this.getOption(OPTION_CURRENT_MEDIAKEY));
if (portletContext != null) {
ajaxInfo.setContextPath(portletContext.getpath());
} else {
ajaxInfo.setContextPath(this.getTMLContext().getpath());
}
ajaxInfo.setOptions(getStatus().getTagOptions());
if (getTMLContext().getprofile() != null) {
ajaxInfo.setSaveProfileOnEnd(getTMLContext().getprofile().isSavedOnEnd());
}
else {
ajaxInfo.setSaveProfileOnEnd(false);
}
ajaxInfo.setSuperform(getStatus().getRelevantForm());
// create javascript object with ajaxInfo
// serialize
String serAjaxInfo = new XStream(new Dom4JDriver()).toXML(ajaxInfo);
// zip
byte[] zipped = Zipper.zip(serAjaxInfo);
String encryptedAjaxInfo = "";
if (zipped != null) {
// encrypt
try {
encryptedAjaxInfo= this.getTMLContext().getwgacore().getDesEncrypter().encrypt(zipped);
}
catch (UnsupportedEncodingException e) {
throw new TMLException("Cannot render ajax enabled include because of unsupported encoding: " + e.getMessage(), true);
}
}
// iframe for form submit
// to prevent iframe from deletion by ajaxCall it has to be outside the divTag