Example usage for org.joda.time DateTime toCalendar

List of usage examples for org.joda.time DateTime toCalendar

Introduction

In this page you can find the example usage for org.joda.time DateTime toCalendar.

Prototype

public Calendar toCalendar(Locale locale) 

Source Link

Document

Get the date time as a java.util.Calendar, assigning exactly the same millisecond instant.

Usage

From source file:net.tirasa.saml.store.SAMLSessionManager.java

License:Apache License

public Date getSAMLSessionValidTo(final List<Assertion> assertions) {
    org.joda.time.DateTime sessionNotOnOrAfter = null;
    if (assertions != null) {
        for (Assertion assertion : assertions) {
            for (AuthnStatement statement : assertion.getAuthnStatements()) {
                sessionNotOnOrAfter = statement.getSessionNotOnOrAfter();
            }/*  w  ww.  j a  v a2s  .  com*/
        }
    }

    return sessionNotOnOrAfter == null ? null : sessionNotOnOrAfter.toCalendar(Locale.getDefault()).getTime();
}

From source file:org.apache.abdera2.model.DateTimeWrapper.java

License:Apache License

public Calendar getCalendar() {
    org.joda.time.DateTime ad = getValue();
    return ad != null ? ad.toCalendar(Locale.getDefault()) : null;
}

From source file:org.brekka.stillingar.core.conversion.TemporalAdapter.java

License:Apache License

public Calendar toCalendar(Object obj, boolean supportsDate, boolean supportsTime, Class<?> expectedType) {
    Calendar value;/*from   www  .  j a  v  a  2  s  .  c o  m*/
    if (obj instanceof Calendar) {
        value = (Calendar) obj;
    } else if (obj instanceof Date) {
        value = Calendar.getInstance();
        value.setTime((Date) obj);
    } else if (obj instanceof String) {
        String dateTimeStr = (String) obj;
        if (!jodaTimeAvailable) {
            throw new IllegalArgumentException(format(
                    "Date/time conversion unavailable for value '%s' to '%s'."
                            + " Add JodaTime library to enable default ISO conversion.",
                    dateTimeStr, expectedType.getName()));
        }
        if (dateTimeStr.length() < 14 && dateTimeStr.endsWith("Z")) {
            dateTimeStr = dateTimeStr.substring(0, dateTimeStr.length() - 1);
        }
        org.joda.time.format.DateTimeFormatter dateTimeParser;
        if (dateTimeStr.charAt(2) == ':') {
            dateTimeParser = org.joda.time.format.ISODateTimeFormat.timeParser();
        } else {
            dateTimeParser = org.joda.time.format.ISODateTimeFormat.dateTimeParser();
        }
        org.joda.time.DateTime dateTime = dateTimeParser.parseDateTime(dateTimeStr);
        value = dateTime.toCalendar(null);
        if (!supportsDate) {
            value.clear(Calendar.YEAR);
            value.clear(Calendar.MONTH);
            value.clear(Calendar.DAY_OF_MONTH);
        }
        if (!supportsTime) {
            value.clear(Calendar.HOUR_OF_DAY);
            value.clear(Calendar.MINUTE);
            value.clear(Calendar.SECOND);
            value.clear(Calendar.MILLISECOND);
        }
    } else {
        throw new IllegalArgumentException(
                format("No temporal conversion available for value of type '%s' to '%s'.",
                        obj.getClass().getName(), expectedType.getName()));
    }
    return value;
}

From source file:org.ddialliance.ddiftp.util.Translator.java

License:Open Source License

/**
 * Format an ISO8601 time string defined by into a Calendar<BR>
 * Defined by '-'? yyyy '-' mm '-' dd 'T' hh ':' mm ':' ss ('.' s+)?
 * (zzzzzz)?//from  ww  w  .j ava 2 s .  co  m
 * 
 * @see http://www.w3.org/TR/xmlschema-2/#dateTime
 * @param time
 *            string
 * @return calendar
 * @throws DDIFtpException
 */
public static Calendar formatIso8601DateTime(String time) throws DDIFtpException {
    // yyyy-MM-dd'T'HH:mm:ss.SSSZZ full format
    DateTimeFormatter fmt = ISODateTimeFormat.dateTime();
    try {
        DateTime dateTime = fmt.parseDateTime(time);
        return dateTime.toCalendar(getLocale());
    } catch (IllegalArgumentException e) {
        try {
            // yyyy-MM-dd'T'HH:mm:ssZZ with out millisecond
            fmt = ISODateTimeFormat.dateTimeNoMillis();
            fmt.withLocale(getLocale());
            fmt.withZone(DateTimeZone.forTimeZone(getTimeZone()));
            DateTime dateTime = fmt.parseDateTime(time);
            return dateTime.toCalendar(getLocale());
        } catch (IllegalArgumentException e1) {
            try {
                // yyyy-MM-dd'T'HH:mm:ss.SS with out time zone
                fmt = ISODateTimeFormat.dateHourMinuteSecondFraction();
                fmt.withLocale(getLocale());
                fmt.withZone(DateTimeZone.forTimeZone(getTimeZone()));
                DateTime dateTime = fmt.parseDateTime(time);
                return dateTime.toCalendar(getLocale());
            } catch (Exception e2) {
                try {
                    // yyyy-MM-dd'T'HH:mm:ss with out millisecond and time
                    // zone
                    fmt = ISODateTimeFormat.dateHourMinuteSecond();
                    fmt.withLocale(getLocale());
                    fmt.withZone(DateTimeZone.forTimeZone(getTimeZone()));
                    DateTime dateTime = fmt.parseDateTime(time);
                    return dateTime.toCalendar(getLocale());
                } catch (IllegalArgumentException e3) {
                    try {
                        fmt = ISODateTimeFormat.dateParser();
                        fmt.withLocale(getLocale());
                        fmt.withZone(DateTimeZone.forTimeZone(getTimeZone()));
                        DateTime dateTime = fmt.parseDateTime(time);
                        return dateTime.toCalendar(getLocale());
                    } catch (Exception e4) {
                        throw new DDIFtpException("translate.timeformat.error",
                                new Object[] { time,
                                        "'-'? yyyy '-' mm '-' dd 'T' hh ':' mm ':' ss ('.' s+)? (zzzzzz)?" },
                                e);
                    }
                }
            }
        }
    }
}

From source file:org.egov.ptis.web.controller.dashboard.CMDashboardController.java

License:Open Source License

/**
 * Provides collection analysis data across all ULBs for MIS Reports
 * @return response JSON//  ww  w .  j a v a  2  s.  c  om
 * @throws IOException
 */
@RequestMapping(value = "/collectionanalysis", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public CollectionAnalysis getCollectionAnalysisForMIS(CollectionDetailsRequest collectionDetailsRequest) {
    if (StringUtils.isNotBlank(collectionDetailsRequest.getIntervalType())) {
        String startDate = StringUtils.EMPTY;
        String endDate = StringUtils.EMPTY;
        if (WEEK.equalsIgnoreCase(collectionDetailsRequest.getIntervalType())) {
            // Prepare the start date based on the month number and year
            String monthStartDateStr = collectionDetailsRequest.getYear().concat("-")
                    .concat(collectionDetailsRequest.getMonth()).concat("-").concat("01");
            LocalDate monthStDate = new LocalDate(monthStartDateStr);
            // Fetch the start date of the 1st week of the month and the last day of the month
            LocalDate weekStart = monthStDate.dayOfWeek().withMinimumValue();
            LocalDate endOfMonth = monthStDate.dayOfMonth().withMaximumValue();
            startDate = weekStart.toString(PropertyTaxConstants.DATE_FORMAT_YYYYMMDD);
            endDate = endOfMonth.toString(PropertyTaxConstants.DATE_FORMAT_YYYYMMDD);
        } else if (DAY.equalsIgnoreCase(collectionDetailsRequest.getIntervalType())) {
            // Prepare the first and last days of the week based on the month, year and week of month values
            DateTime date = new DateTime().withYear(Integer.parseInt(collectionDetailsRequest.getYear()))
                    .withMonthOfYear(Integer.parseInt(collectionDetailsRequest.getMonth()));
            Calendar cal = date.toCalendar(Locale.getDefault());
            cal.set(Calendar.DAY_OF_WEEK, 2);
            cal.set(Calendar.WEEK_OF_MONTH, Integer.parseInt(collectionDetailsRequest.getWeek()));
            DateTime weekStartDate = new DateTime(cal).withMillisOfDay(0);
            startDate = weekStartDate.toString(PropertyTaxConstants.DATE_FORMAT_YYYYMMDD);
            Date weekEndDate = DateUtils.addDays(weekStartDate.toDate(), 6);
            endDate = PropertyTaxConstants.DATEFORMATTER_YYYY_MM_DD.format(weekEndDate);
        }
        if (WEEK.equalsIgnoreCase(collectionDetailsRequest.getIntervalType())
                || DAY.equalsIgnoreCase(collectionDetailsRequest.getIntervalType())) {
            collectionDetailsRequest.setFromDate(startDate);
            collectionDetailsRequest.setToDate(endDate);
        }
    }
    return propTaxDashboardService.getCollectionAnalysisData(collectionDetailsRequest,
            collectionDetailsRequest.getIntervalType());
}

From source file:org.jahia.bin.Action.java

License:Open Source License

protected void setProperties(JCRNodeWrapper newNode, Map<String, List<String>> parameters)
        throws RepositoryException {
    Set<Map.Entry<String, List<String>>> set = parameters.entrySet();
    for (Map.Entry<String, List<String>> entry : set) {
        String key = entry.getKey();
        if (!Render.RESERVED_PARAMETERS.contains(key)) {
            List<String> values = entry.getValue();
            ExtendedPropertyDefinition propertyDefinition = null;
            propertyDefinition = newNode.getApplicablePropertyDefinition(key);
            if (propertyDefinition == null) {
                continue;
            }//from   w ww  . j a v  a 2s . c om
            if (propertyDefinition.isMultiple()) {
                newNode.setProperty(key, values.toArray(new String[values.size()]));
            } else if (values.get(0).length() > 0) {
                if (propertyDefinition.getRequiredType() == ExtendedPropertyType.DATE) {
                    DateTime dateTime = ISODateTimeFormat.dateOptionalTimeParser().parseDateTime(values.get(0));
                    newNode.setProperty(key, dateTime.toCalendar(Locale.ENGLISH));
                } else {
                    newNode.setProperty(key, values.get(0));
                }
            }
        }
    }
}

From source file:org.jahia.bin.DefaultPutAction.java

License:Open Source License

@Override
public ActionResult doExecute(HttpServletRequest req, RenderContext renderContext, Resource resource,
        JCRSessionWrapper session, Map<String, List<String>> parameters, URLResolver urlResolver)
        throws Exception {
    JCRNodeWrapper node = session.getNode(urlResolver.getPath());
    // Get node information before any modification as a rule can delete it
    String primaryNodeTypeName = node.getPrimaryNodeTypeName();
    session.checkout(node);/*from   w  w  w . j  a v  a 2s.c  o m*/

    if (parameters.containsKey(Render.REMOVE_MIXIN)) {
        for (String mixinType : parameters.get(Render.REMOVE_MIXIN)) {
            node.removeMixin(mixinType);
        }
    }
    if (parameters.containsKey(Constants.JCR_MIXINTYPES)) {
        for (String mixinType : parameters.get(Constants.JCR_MIXINTYPES)) {
            node.addMixin(mixinType);
        }
    }
    Set<Map.Entry<String, List<String>>> set = parameters.entrySet();
    try {
        for (Map.Entry<String, List<String>> entry : set) {
            String key = entry.getKey();
            if (!Render.getReservedParameters().contains(key)) {
                List<String> values = entry.getValue();
                final ExtendedPropertyDefinition propertyDefinition = ((JCRNodeWrapper) node)
                        .getApplicablePropertyDefinition(key);
                if (propertyDefinition == null) {
                    continue;
                }
                if (propertyDefinition.isMultiple()) {
                    if (values.size() == 1 && values.get(0).equals("jcrClearAllValues")) {
                        node.setProperty(key, new Value[0]);
                    } else {
                        node.setProperty(key, values.toArray(new String[values.size()]));
                    }
                } else if (propertyDefinition.getRequiredType() == PropertyType.DATE) {
                    // Expecting ISO date yyyy-MM-dd'T'HH:mm:ss
                    DateTime dateTime = ISODateTimeFormat.dateOptionalTimeParser().parseDateTime(values.get(0));
                    node.setProperty(key, dateTime.toCalendar(Locale.ENGLISH));
                } else {
                    node.setProperty(key, values.get(0));
                }
            }
        }
        session.save();
    } catch (CompositeConstraintViolationException e) {
        List<JSONObject> jsonErrors = new ArrayList<JSONObject>();
        for (ConstraintViolationException exception : e.getErrors()) {
            jsonErrors.add(getJSONConstraintError(exception));
        }
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("validationError", jsonErrors);
        return new ActionResult(HttpServletResponse.SC_BAD_REQUEST, null, jsonObject);
    } catch (ConstraintViolationException e) {
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("validationError", Arrays.asList(getJSONConstraintError(e)));
        return new ActionResult(HttpServletResponse.SC_BAD_REQUEST, null, jsonObject);
    } catch (Exception e) {
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("error", e.getMessage());
        return new ActionResult(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, null, jsonObject);
    }

    if (req.getParameter(Render.AUTO_CHECKIN) != null && req.getParameter(Render.AUTO_CHECKIN).length() > 0) {
        session.getWorkspace().getVersionManager().checkpoint(node.getPath());
    }

    String sessionID = "";
    HttpSession httpSession = req.getSession(false);
    if (httpSession != null) {
        sessionID = httpSession.getId();
    }
    if (loggingService.isEnabled()) {
        loggingService.logContentEvent(renderContext.getUser().getName(), req.getRemoteAddr(), sessionID,
                node.getIdentifier(), urlResolver.getPath(), primaryNodeTypeName, "nodeUpdated",
                new JSONObject(req.getParameterMap()).toString());
    }

    final String requestWith = req.getHeader("x-requested-with");
    if (req.getHeader("accept") != null && req.getHeader("accept").contains("application/json")
            && requestWith != null && requestWith.equals("XMLHttpRequest")) {
        JSONObject jsonObject = null;
        try {
            jsonObject = Render.serializeNodeToJSON(node);
        } catch (RepositoryException e) {
        }
        return new ActionResult(HttpServletResponse.SC_OK, node.getPath(), jsonObject);
    } else {
        return ActionResult.OK;
    }
}

From source file:org.jahia.bin.Render.java

License:Open Source License

protected void doPut(HttpServletRequest req, HttpServletResponse resp, RenderContext renderContext,
        URLResolver urlResolver) throws RepositoryException, IOException {
    JCRSessionWrapper session = jcrSessionFactory.getCurrentUserSession(urlResolver.getWorkspace(),
            urlResolver.getLocale());/*  w  w  w  . j a va2 s . com*/
    JCRNodeWrapper node = session.getNode(urlResolver.getPath());
    session.checkout(node);
    @SuppressWarnings("unchecked")
    Map<String, String[]> parameters = req.getParameterMap();
    if (parameters.containsKey(REMOVE_MIXIN)) {
        String[] mixinTypes = (String[]) parameters.get(REMOVE_MIXIN);
        for (String mixinType : mixinTypes) {
            node.removeMixin(mixinType);
        }
    }
    if (parameters.containsKey(Constants.JCR_MIXINTYPES)) {
        String[] mixinTypes = (String[]) parameters.get(Constants.JCR_MIXINTYPES);
        for (String mixinType : mixinTypes) {
            node.addMixin(mixinType);
        }
    }
    Set<Map.Entry<String, String[]>> set = parameters.entrySet();
    try {
        for (Map.Entry<String, String[]> entry : set) {
            String key = entry.getKey();
            if (!reservedParameters.contains(key)) {
                String[] values = entry.getValue();
                final ExtendedPropertyDefinition propertyDefinition = ((JCRNodeWrapper) node)
                        .getApplicablePropertyDefinition(key);
                if (propertyDefinition == null) {
                    continue;
                }
                if (propertyDefinition.isMultiple()) {
                    node.setProperty(key, values);
                } else if (propertyDefinition.getRequiredType() == PropertyType.DATE) {
                    // Expecting ISO date yyyy-MM-dd'T'HH:mm:ss
                    DateTime dateTime = ISODateTimeFormat.dateOptionalTimeParser().parseDateTime(values[0]);
                    node.setProperty(key, dateTime.toCalendar(Locale.ENGLISH));
                } else {
                    node.setProperty(key, values[0]);
                }
            }
        }
    } catch (ConstraintViolationException e) {
        resp.sendError(HttpServletResponse.SC_BAD_REQUEST, "bad parameter");
        return;
    }
    session.save();
    if (req.getParameter(AUTO_CHECKIN) != null && req.getParameter(AUTO_CHECKIN).length() > 0) {
        session.getWorkspace().getVersionManager().checkpoint(node.getPath());
    }
    final String requestWith = req.getHeader("x-requested-with");
    if (req.getHeader("accept").contains("application/json") && requestWith != null
            && requestWith.equals("XMLHttpRequest")) {
        try {
            serializeNodeToJSON(node).write(resp.getWriter());
        } catch (JSONException e) {
            logger.error(e.getMessage(), e);
        }
    } else {
        performRedirect(null, null, req, resp, toParameterMapOfListOfString(req), false);
    }
    addCookie(req, resp);
    String sessionID = "";
    HttpSession httpSession = req.getSession(false);
    if (httpSession != null) {
        sessionID = httpSession.getId();
    }
    if (loggingService.isEnabled()) {
        loggingService.logContentEvent(renderContext.getUser().getName(), req.getRemoteAddr(), sessionID,
                node.getIdentifier(), urlResolver.getPath(), node.getPrimaryNodeType().getName(), "nodeUpdated",
                new JSONObject(req.getParameterMap()).toString());
    }
}

From source file:org.jahia.modules.gateway.JSONToJCRDeserializer.java

License:Open Source License

private void setPropertiesOnNode(JCRNodeWrapper newNode, JSONObject properties, ExtendedNodeType nodeType)
        throws RepositoryException {
    Iterator keys = properties.keys();
    while (keys.hasNext()) {
        String property = (String) keys.next();
        try {//from w w  w  .  j av a 2  s  .  c  o m
            String value = (String) properties.get(property);
            boolean needUpdate;
            logger.debug("added property " + property + " with value " + value);
            String name = property.replaceAll("_", ":");
            try {
                needUpdate = !(newNode.getProperty(name).getValue().getString().equals(value));
            } catch (RepositoryException e1) {
                needUpdate = true;
            }
            if (needUpdate) {
                ExtendedPropertyDefinition propertyDefinition = nodeType.getPropertyDefinition(name);
                if (propertyDefinition == null) {
                    ExtendedNodeType[] declaredSupertypes = nodeType.getDeclaredSupertypes();
                    for (ExtendedNodeType declaredSupertype : declaredSupertypes) {
                        propertyDefinition = declaredSupertype.getPropertyDefinition(name);
                        if (propertyDefinition != null) {
                            break;
                        }
                    }
                }
                int requiredType = 0;
                if (propertyDefinition != null) {
                    requiredType = propertyDefinition.getRequiredType();
                }
                switch (requiredType) {
                case ExtendedPropertyType.DATE:
                    DateTime dateTime = ISODateTimeFormat.dateOptionalTimeParser().parseDateTime(value);
                    newNode.setProperty(name, dateTime.toCalendar(Locale.ENGLISH));
                    break;
                case ExtendedPropertyType.REFERENCE:
                case ExtendedPropertyType.WEAKREFERENCE:
                    File file = new File(value);
                    JCRNodeWrapper files = newNode.getSession()
                            .getNode(newNode.getResolveSite().getPath() + "/files");
                    FileInputStream is = null;
                    try {
                        is = FileUtils.openInputStream(file);
                        JCRNodeWrapper reference = files.uploadFile(file.getName(), is,
                                JCRContentUtils.getMimeType(file.getName()));
                        newNode.setProperty(name, reference);
                    } finally {
                        IOUtils.closeQuietly(is);
                        FileUtils.deleteQuietly(file);
                    }
                    break;
                default:
                    newNode.setProperty(name, value);
                    break;
                }
            }
        } catch (JSONException e) {
            logger.error(e.getMessage(), e);
        } catch (IOException e) {
            logger.error(e.getMessage(), e);
        }
    }
}

From source file:org.jahia.modules.portal.service.PortalService.java

License:Open Source License

public PortalContext buildPortalContext(RenderContext renderContext, JCRNodeWrapper portalTabNode,
        JCRSessionWrapper sessionWrapper, final boolean updateLastPortalUsed) throws RepositoryException {
    final String currentPath = portalTabNode.getPath();
    final boolean isEditable = portalTabNode.hasPermission("jcr:write_live");
    final Locale mainResourceLocale = renderContext.getMainResourceLocale();
    final String siteKey = renderContext.getSite().getSiteKey();

    PortalContext portalContext = JCRTemplate.getInstance().doExecuteWithSystemSession(
            sessionWrapper.getUser().getUsername(), sessionWrapper.getWorkspace().getName(),
            sessionWrapper.getLocale(), new JCRCallback<PortalContext>() {
                @Override/*from   w ww .  j  av  a2  s  . co  m*/
                public PortalContext doInJCR(JCRSessionWrapper session) throws RepositoryException {
                    JCRNodeWrapper portalTabNode = session.getNode(currentPath);
                    JCRNodeWrapper portalNode = JCRContentUtils.getParentOfType(portalTabNode,
                            PortalConstants.JMIX_PORTAL);

                    PortalContext portalContext = new PortalContext();
                    boolean isModel = portalNode.isNodeType(PortalConstants.JNT_PORTAL_MODEL);
                    portalContext.setEditable(isEditable);
                    portalContext.setPath(portalNode.getPath());
                    portalContext.setIdentifier(portalNode.getIdentifier());
                    portalContext.setTabPath(portalTabNode.getPath());
                    portalContext.setTabIdentifier(portalTabNode.getIdentifier());
                    portalContext.setFullTemplate(
                            portalNode.getProperty(PortalConstants.J_FULL_TEMPLATE).getString());
                    portalContext.setLock(portalNode.hasProperty(PortalConstants.J_LOCKED)
                            && portalNode.getProperty(PortalConstants.J_LOCKED).getBoolean());
                    portalContext.setModel(isModel);
                    portalContext.setCustomizable(isModel
                            && portalNode.hasProperty(PortalConstants.J_ALLOW_CUSTOMIZATION)
                            && portalNode.getProperty(PortalConstants.J_ALLOW_CUSTOMIZATION).getBoolean());
                    JCRSiteNode site = JahiaSitesService.getInstance().getSiteByKey(siteKey, session);

                    JCRNodeWrapper modelNode = null;
                    boolean modelDeleted = false;
                    if (isModel) {
                        portalContext.setEnabled(portalNode.hasProperty(PortalConstants.J_ENABLED)
                                && portalNode.getProperty(PortalConstants.J_ENABLED).getBoolean());
                    } else {
                        try {
                            modelNode = (JCRNodeWrapper) portalNode.getProperty(PortalConstants.J_MODEL)
                                    .getNode();
                        } catch (Exception e) {
                            // model deleted
                        }
                        if (modelNode != null) {
                            portalContext.setModelPath(modelNode.getPath());
                            portalContext.setModelIdentifier(modelNode.getIdentifier());
                            portalContext.setEnabled(modelNode.hasProperty(PortalConstants.J_ENABLED)
                                    && modelNode.getProperty(PortalConstants.J_ENABLED).getBoolean());
                        } else {
                            portalContext.setEnabled(false);
                            modelDeleted = true;
                        }
                    }

                    portalContext.setSiteKey(site.getSiteKey());
                    portalContext.setPortalTabTemplates(new ArrayList<PortalKeyNameObject>());
                    portalContext.setPortalTabSkins(new ArrayList<PortalKeyNameObject>());
                    portalContext.setPortalWidgetTypes(new TreeSet<PortalWidgetType>(WIDGET_TYPES_COMPARATOR));
                    if (isEditable) {

                        // Templates for portal tabs
                        List<JCRNodeWrapper> templates = getPortalTabTemplates(
                                portalNode.getProperty(PortalConstants.J_TEMPLATE_ROOT_PATH).getString(),
                                session);
                        for (JCRNodeWrapper template : templates) {
                            PortalKeyNameObject portalTabTemplate = new PortalKeyNameObject();
                            portalTabTemplate.setName(template.getDisplayableName());
                            portalTabTemplate.setKey(template.getName());
                            portalContext.getPortalTabTemplates().add(portalTabTemplate);
                        }

                        // Widget skins
                        SortedSet<View> widgetSkins = getViewSet(PortalConstants.JMIX_PORTAL_WIDGET, site);
                        for (View widgetView : widgetSkins) {
                            if (widgetView.getKey().startsWith("box")) {
                                PortalKeyNameObject portalTabSkin = new PortalKeyNameObject();
                                try {
                                    portalTabSkin.setName(Messages.get(widgetView.getModule(),
                                            widgetView.getKey(), mainResourceLocale));
                                } catch (MissingResourceException e) {
                                    // no resourceBundle for skin
                                    portalTabSkin.setName(widgetView.getKey());
                                }

                                portalTabSkin.setKey(widgetView.getKey());
                                portalContext.getPortalTabSkins().add(portalTabSkin);
                            }
                        }

                        // Widget types
                        Collection<ExtendedNodeType> widgetTypes = getPortalWidgetNodeTypes(portalNode);
                        Collection<ExtendedNodeType> modelWidgetTypes = !isModel && !modelDeleted
                                ? getPortalWidgetNodeTypes(modelNode)
                                : null;

                        for (ExtendedNodeType widgetType : widgetTypes) {
                            if (!isModel && !modelDeleted) {
                                if (modelWidgetTypes.contains(widgetType)) {
                                    PortalWidgetType portalWidgetType = buildPortalWidgetType(widgetType, site,
                                            mainResourceLocale, false);
                                    portalContext.getPortalWidgetTypes().add(portalWidgetType);
                                    modelWidgetTypes.remove(widgetType);
                                }
                            } else {
                                PortalWidgetType portalWidgetType = buildPortalWidgetType(widgetType, site,
                                        mainResourceLocale, false);
                                portalContext.getPortalWidgetTypes().add(portalWidgetType);
                            }
                        }
                        if (!isModel && !modelDeleted) {
                            for (ExtendedNodeType modelWidgetType : modelWidgetTypes) {
                                PortalWidgetType portalWidgetType = buildPortalWidgetType(modelWidgetType, site,
                                        mainResourceLocale, true);
                                portalContext.getPortalWidgetTypes().add(portalWidgetType);
                            }
                        }
                    }

                    if (updateLastPortalUsed) {
                        DateTime currentDateTime = new DateTime();
                        String lastViewed = portalNode.getPropertyAsString(PortalConstants.J_LASTVIEWED);

                        boolean firstView = StringUtils.isEmpty(lastViewed);
                        if (firstView || currentDateTime.getDayOfYear() != ISODateTimeFormat
                                .dateOptionalTimeParser().parseDateTime(lastViewed).getDayOfYear()) {
                            portalNode.setProperty(PortalConstants.J_LASTVIEWED,
                                    currentDateTime.toCalendar(mainResourceLocale));
                            portalNode.saveSession();
                        }
                    }

                    return portalContext;
                }
            });

    portalContext.setBaseUrl(StringUtils.isNotEmpty(renderContext.getURLGenerator().getContext())
            ? renderContext.getURLGenerator().getContext() + renderContext.getURLGenerator().getBaseLive()
            : renderContext.getURLGenerator().getBaseLive());

    return portalContext;
}