return ctx.isAt(m_uri, m_name);
}
public Object unmarshal(Object obj, IUnmarshallingContext ictx) throws JiBXException
{
UnmarshallingContext ctx = (UnmarshallingContext)ictx;
if (!ctx.isAt(m_uri, m_name))
{
ctx.throwStartTagNameError(m_uri, m_name);
}
//
if (obj != null)
{
throw new AssertionError("That should not happen");
}
// Id
String id = optionalAttribute(ctx, "id");
//
ctx.parsePastStartTag(m_uri, m_name);
//
Application<?> app;
TransientApplicationState state;
if ("application".equals(m_name))
{
String instanceId = ctx.parseElementText(m_uri, "instance-id");
instanceId = NewPortalConfigListener.fixInstanceIdOwnerName(instanceId);
int i0 = instanceId.indexOf("#");
int i1 = instanceId.indexOf(":/", i0 + 1);
String ownerType = instanceId.substring(0, i0);
String ownerId = instanceId.substring(i0 + 1, i1);
String persistenceid = instanceId.substring(i1 + 2);
String[] persistenceChunks = split("/", persistenceid);
if (persistenceChunks.length == 2)
{
state = new TransientApplicationState<Portlet>(
persistenceChunks[0] + "/" + persistenceChunks[1],
null,
ownerType,
ownerId,
null);
}
else
{
state = new TransientApplicationState<Portlet>(
persistenceChunks[0] + "/" + persistenceChunks[1],
null,
ownerType,
ownerId,
persistenceChunks[2]);
}
app = Application.createPortletApplication();
app.setState(state);
}
// Since we don't support dashboard's here, this only works for gadgets using the gadget wrapper portlet.
else if ("gadget-application".equals(m_name))
{
ctx.parsePastStartTag(m_uri, "gadget");
String gadgetName = ctx.parseElementText(m_uri, "gadget-ref");
Gadget gadget = null;
// Once the gadget portlet wrapper is able to use gadget userPref's, include parsing logic here.
// Gadget gadget = new Gadget();
// gadget.setUserPref();
state = new TransientApplicationState<Gadget>(gadgetName, gadget);
app = Application.createGadgetApplication();
app.setState(state);
ctx.parsePastEndTag(m_uri, "gadget");
}
else
{
String contentId;
boolean isWSRP = false;
if(ctx.isAt(m_uri, "wsrp"))
{
contentId = ctx.parseElementText(m_uri, "wsrp");
app = Application.createWSRPApplication();
isWSRP = true;
}
else
{
ctx.parsePastStartTag(m_uri, "portlet");
String applicationName = ctx.parseElementText(m_uri, "application-ref");
String portletName = ctx.parseElementText(m_uri, "portlet-ref");
contentId = applicationName + "/" + portletName;
app = Application.createPortletApplication();
}
if (ctx.isAt(m_uri, "preferences"))
{
PortletBuilder builder = new PortletBuilder();
ctx.parsePastStartTag(m_uri, "preferences");
while (ctx.isAt(m_uri, "preference"))
{
Preference value = (Preference)ctx.unmarshalElement();
builder.add(value.getName(), value.getValues(), value.isReadOnly());
}
ctx.parsePastEndTag(m_uri, "preferences");
state = new TransientApplicationState(contentId, builder.build());
}
else
{
state = new TransientApplicationState(contentId, null);
}
if(!isWSRP)
{
ctx.parsePastEndTag(m_uri, "portlet");
}
app.setState(state);
}
//
nextOptionalTag(ctx, "application-type");
String theme = nextOptionalTag(ctx, "theme");
String title = nextOptionalTag(ctx, "title");
String accessPermissions = nextOptionalTag(ctx, "access-permissions");
boolean showInfoBar = nextOptionalBooleanTag(ctx, "show-info-bar", true);
boolean showApplicationState = nextOptionalBooleanTag(ctx, "show-application-state", true);
boolean showApplicationMode = nextOptionalBooleanTag(ctx, "show-application-mode", true);
String description = nextOptionalTag(ctx, "description");
String icon = nextOptionalTag(ctx, "icon");
String width = nextOptionalTag(ctx, "width");
String height = nextOptionalTag(ctx, "height");
//
Properties properties = null;
if (ctx.isAt(m_uri, "properties"))
{
properties = (Properties)ctx.unmarshalElement();
}
//
ctx.parsePastEndTag(m_uri, m_name);
//
app.setId(id);
app.setTheme(theme);
app.setTitle(title);