Example usage for org.apache.commons.lang.time StopWatch getTime

List of usage examples for org.apache.commons.lang.time StopWatch getTime

Introduction

In this page you can find the example usage for org.apache.commons.lang.time StopWatch getTime.

Prototype

public long getTime() 

Source Link

Document

Get the time on the stopwatch.

This is either the time between the start and the moment this method is called, or the amount of time between start and stop.

Usage

From source file:chibi.gemmaanalysis.GeneExpressionWriterCLI.java

@Override
protected Exception doWork(String[] args) {

    StopWatch timer = new StopWatch();
    timer.start();/*from   ww w. java  2  s  .  c o  m*/

    String HEADER = "HEADER";

    processCommandLine(args);

    Collection<Gene> genes;
    try {
        genes = getQueryGenes();
    } catch (IOException e) {
        return e;
    }

    StringBuffer sb = new StringBuffer();
    for (Gene gene : genes) {
        sb.append(gene.toString());
        sb.append(", ");
    }
    log.info(genes.size() + " genes: " + sb.toString());

    sb = new StringBuffer();
    for (BioAssaySet bas : this.expressionExperiments) {
        sb.append(bas.toString());
        sb.append(", ");
    }
    log.info(this.expressionExperiments.size() + " experiments: " + sb.toString());

    Map<Object, StringBuffer> outBuffs = new HashMap<>();

    String fileName = outFilePrefix + ".txt";

    log.info("Output filename " + fileName);

    for (BioAssaySet bas : this.expressionExperiments) {
        ExpressionExperiment ee = (ExpressionExperiment) bas;
        Collection<ArrayDesign> ads = eeService.getArrayDesignsUsed(ee);
        Collection<CompositeSequence> css = new HashSet<CompositeSequence>();
        for (ArrayDesign ad : ads) {
            css.addAll(adService.getCompositeSequences(ad));
        }

        log.info("====================================");
        log.info("Experiment " + ee + "; Array Design " + ads + "; Composite sequences " + css.size());

        Map<Gene, Collection<CompositeSequence>> gene2css = getGene2CsMap(css);
        // ExpressionDataDoubleMatrix dataMatrix = expressionDataMatrixService.getFilteredMatrix( ee, filterConfig
        // );
        ExpressionDataDoubleMatrix dataMatrix = expressionDataMatrixService
                .getProcessedExpressionDataMatrix(ee);

        // store values inside a buffer
        if (!outBuffs.containsKey(HEADER)) {
            StringBuffer hb = new StringBuffer();
            hb.append("Gene\tProbe\tID");
            outBuffs.put(HEADER, hb);
        }
        for (BioMaterial bm : dataMatrix.getMatrix().getColNames()) {
            // bm.getFactorValues()
            // bm.getCharacteristics()
            // outBuffs.get( HEADER )
            // .append(
            // "\t" + bm.getName() + "."
            // + StringUtils.collectionToDelimitedString( bm.getFactorValues(), "," ) );
            outBuffs.get(HEADER)
                    .append("\t" + ee.getShortName() + "." + bm.getName() + "."
                            + StringUtils.collectionToDelimitedString(bm.getCharacteristics(), ",") + "."
                            + StringUtils.collectionToDelimitedString(bm.getFactorValues(), ","));
        }

        for (Gene gene : genes) {
            log.debug(" Getting component sequence for gene " + gene);
            Collection<CompositeSequence> c = gene2css.get(gene);

            if (c == null) {
                log.error("No composite sequences found for gene " + gene);
                continue;
            }

            for (CompositeSequence cs : c) {

                Double[] row = dataMatrix.getRow(cs);
                if (row == null) {
                    log.error("Cannot get data from data matrix for " + gene.getOfficialSymbol() + " ("
                            + cs.getName() + ")");
                    // continue;
                    row = new Double[dataMatrix.getMatrix().columns()];
                }

                if (!outBuffs.containsKey(cs)) {
                    StringBuffer gb = new StringBuffer();
                    gb.append(gene.getOfficialSymbol() + "\t" + cs.getName() + "\t" + cs.getId());
                    outBuffs.put(cs, gb);
                }

                StringBuffer buf = new StringBuffer();
                for (Double d : row) {
                    if (d == null)
                        buf.append("NA");
                    else
                        buf.append(d);
                    buf.append("\t");
                }
                buf.deleteCharAt(buf.length() - 1);
                outBuffs.get(cs).append("\t" + buf.toString());
            }
        }

    }

    // Output to file
    try (PrintWriter out = new PrintWriter(new FileWriter(fileName));) {
        out.println(outBuffs.get(HEADER));
        for (Object key : outBuffs.keySet()) {
            if (key.equals(HEADER)) {
                continue;
            }
            out.println(outBuffs.get(key));
        }
    } catch (IOException e) {
        return e;
    }

    log.info("Done. Wrote " + genes.size() + " genes and " + (outBuffs.keySet().size() - 1)
            + " composite sequences in " + this.expressionExperiments.size() + " experiments which took "
            + timer.getTime() + " ms. Output file " + fileName);

    return null;
}

From source file:com.liferay.portal.lar.LayoutImporter.java

protected void doImportLayouts(long userId, long groupId, boolean privateLayout,
        Map<String, String[]> parameterMap, File file) throws Exception {

    boolean deleteMissingLayouts = MapUtil.getBoolean(parameterMap,
            PortletDataHandlerKeys.DELETE_MISSING_LAYOUTS, Boolean.TRUE.booleanValue());
    boolean deletePortletData = MapUtil.getBoolean(parameterMap, PortletDataHandlerKeys.DELETE_PORTLET_DATA);
    boolean importCategories = MapUtil.getBoolean(parameterMap, PortletDataHandlerKeys.CATEGORIES);
    boolean importPermissions = MapUtil.getBoolean(parameterMap, PortletDataHandlerKeys.PERMISSIONS);
    boolean importPublicLayoutPermissions = MapUtil.getBoolean(parameterMap,
            PortletDataHandlerKeys.PUBLIC_LAYOUT_PERMISSIONS);
    boolean importUserPermissions = MapUtil.getBoolean(parameterMap, PortletDataHandlerKeys.USER_PERMISSIONS);
    boolean importPortletData = MapUtil.getBoolean(parameterMap, PortletDataHandlerKeys.PORTLET_DATA);
    boolean importPortletSetup = MapUtil.getBoolean(parameterMap, PortletDataHandlerKeys.PORTLET_SETUP);
    boolean importPortletArchivedSetups = MapUtil.getBoolean(parameterMap,
            PortletDataHandlerKeys.PORTLET_ARCHIVED_SETUPS);
    boolean importPortletUserPreferences = MapUtil.getBoolean(parameterMap,
            PortletDataHandlerKeys.PORTLET_USER_PREFERENCES);
    boolean importTheme = MapUtil.getBoolean(parameterMap, PortletDataHandlerKeys.THEME);
    boolean importThemeSettings = MapUtil.getBoolean(parameterMap, PortletDataHandlerKeys.THEME_REFERENCE);
    boolean layoutSetPrototypeLinkEnabled = MapUtil.getBoolean(parameterMap,
            PortletDataHandlerKeys.LAYOUT_SET_PROTOTYPE_LINK_ENABLED, true);
    boolean publishToRemote = MapUtil.getBoolean(parameterMap, PortletDataHandlerKeys.PUBLISH_TO_REMOTE);
    String layoutsImportMode = MapUtil.getString(parameterMap, PortletDataHandlerKeys.LAYOUTS_IMPORT_MODE,
            PortletDataHandlerKeys.LAYOUTS_IMPORT_MODE_MERGE_BY_LAYOUT_UUID);
    String portletsMergeMode = MapUtil.getString(parameterMap, PortletDataHandlerKeys.PORTLETS_MERGE_MODE,
            PortletDataHandlerKeys.PORTLETS_MERGE_MODE_REPLACE);
    String userIdStrategy = MapUtil.getString(parameterMap, PortletDataHandlerKeys.USER_ID_STRATEGY);

    if (_log.isDebugEnabled()) {
        _log.debug("Delete portlet data " + deletePortletData);
        _log.debug("Import categories " + importCategories);
        _log.debug("Import permissions " + importPermissions);
        _log.debug("Import user permissions " + importUserPermissions);
        _log.debug("Import portlet data " + importPortletData);
        _log.debug("Import portlet setup " + importPortletSetup);
        _log.debug("Import portlet archived setups " + importPortletArchivedSetups);
        _log.debug("Import portlet user preferences " + importPortletUserPreferences);
        _log.debug("Import theme " + importTheme);
    }//w  w w.  j a va2s .c o m

    StopWatch stopWatch = null;

    if (_log.isInfoEnabled()) {
        stopWatch = new StopWatch();

        stopWatch.start();
    }

    LayoutCache layoutCache = new LayoutCache();

    LayoutSet layoutSet = LayoutSetLocalServiceUtil.getLayoutSet(groupId, privateLayout);

    long companyId = layoutSet.getCompanyId();

    User user = UserUtil.findByPrimaryKey(userId);

    UserIdStrategy strategy = _portletImporter.getUserIdStrategy(user, userIdStrategy);

    ZipReader zipReader = ZipReaderFactoryUtil.getZipReader(file);

    PortletDataContext portletDataContext = new PortletDataContextImpl(companyId, groupId, parameterMap,
            new HashSet<String>(), strategy, zipReader);

    portletDataContext.setPortetDataContextListener(new PortletDataContextListenerImpl(portletDataContext));

    portletDataContext.setPrivateLayout(privateLayout);

    // Zip

    Element rootElement = null;
    InputStream themeZip = null;

    // Manifest

    String xml = portletDataContext.getZipEntryAsString("/manifest.xml");

    if (xml == null) {
        throw new LARFileException("manifest.xml not found in the LAR");
    }

    try {
        Document document = SAXReaderUtil.read(xml);

        rootElement = document.getRootElement();
    } catch (Exception e) {
        throw new LARFileException(e);
    }

    // Build compatibility

    Element headerElement = rootElement.element("header");

    int buildNumber = ReleaseInfo.getBuildNumber();

    int importBuildNumber = GetterUtil.getInteger(headerElement.attributeValue("build-number"));

    if (buildNumber != importBuildNumber) {
        throw new LayoutImportException("LAR build number " + importBuildNumber + " does not match "
                + "portal build number " + buildNumber);
    }

    // Type compatibility

    String larType = headerElement.attributeValue("type");

    if (!larType.equals("layout-set")) {
        throw new LARTypeException("Invalid type of LAR file (" + larType + ")");
    }

    // Group id

    long sourceGroupId = GetterUtil.getLong(headerElement.attributeValue("group-id"));

    portletDataContext.setSourceGroupId(sourceGroupId);

    // Layout set prototype

    String layoutSetPrototypeUuid = headerElement.attributeValue("layout-set-prototype-uuid");

    ServiceContext serviceContext = ServiceContextThreadLocal.getServiceContext();

    if (Validator.isNotNull(layoutSetPrototypeUuid)) {
        if (layoutSetPrototypeLinkEnabled) {
            if (publishToRemote) {
                importLayoutSetPrototype(portletDataContext, user, layoutSetPrototypeUuid, serviceContext);
            }
        }

        layoutSet.setLayoutSetPrototypeUuid(layoutSetPrototypeUuid);
        layoutSet.setLayoutSetPrototypeLinkEnabled(layoutSetPrototypeLinkEnabled);

        LayoutSetLocalServiceUtil.updateLayoutSet(layoutSet);
    }

    // Look and feel

    if (importTheme) {
        themeZip = portletDataContext.getZipEntryAsInputStream("theme.zip");
    }

    // Look and feel

    String themeId = layoutSet.getThemeId();
    String colorSchemeId = layoutSet.getColorSchemeId();

    if (importThemeSettings) {
        Attribute themeIdAttribute = headerElement.attribute("theme-id");

        if (themeIdAttribute != null) {
            themeId = themeIdAttribute.getValue();
        }

        Attribute colorSchemeIdAttribute = headerElement.attribute("color-scheme-id");

        if (colorSchemeIdAttribute != null) {
            colorSchemeId = colorSchemeIdAttribute.getValue();
        }
    }

    String css = GetterUtil.getString(headerElement.elementText("css"));

    if (themeZip != null) {
        String importThemeId = importTheme(layoutSet, themeZip);

        if (importThemeId != null) {
            themeId = importThemeId;
            colorSchemeId = ColorSchemeImpl.getDefaultRegularColorSchemeId();
        }

        if (_log.isDebugEnabled()) {
            _log.debug("Importing theme takes " + stopWatch.getTime() + " ms");
        }
    }

    boolean wapTheme = false;

    LayoutSetLocalServiceUtil.updateLookAndFeel(groupId, privateLayout, themeId, colorSchemeId, css, wapTheme);

    // Read asset categories, asset tags, comments, locks, permissions, and
    // ratings entries to make them available to the data handlers through
    // the context

    if (importPermissions) {
        _permissionImporter.readPortletDataPermissions(portletDataContext);
    }

    if (importCategories) {
        _portletImporter.readAssetCategories(portletDataContext);
    }

    _portletImporter.readAssetTags(portletDataContext);
    _portletImporter.readComments(portletDataContext);
    _portletImporter.readExpandoTables(portletDataContext);
    _portletImporter.readLocks(portletDataContext);
    _portletImporter.readRatingsEntries(portletDataContext);

    // Layouts

    List<Layout> previousLayouts = LayoutUtil.findByG_P(groupId, privateLayout);

    // Remove layouts that were deleted from the layout set prototype

    if (Validator.isNotNull(layoutSetPrototypeUuid) && layoutSetPrototypeLinkEnabled) {

        LayoutSetPrototype layoutSetPrototype = LayoutSetPrototypeLocalServiceUtil
                .getLayoutSetPrototypeByUuid(layoutSetPrototypeUuid);

        Group group = layoutSetPrototype.getGroup();

        for (Layout layout : previousLayouts) {
            String sourcePrototypeLayoutUuid = layout.getSourcePrototypeLayoutUuid();

            if (Validator.isNull(layout.getSourcePrototypeLayoutUuid())) {
                continue;
            }

            Layout sourcePrototypeLayout = LayoutUtil.fetchByUUID_G(sourcePrototypeLayoutUuid,
                    group.getGroupId());

            if (sourcePrototypeLayout == null) {
                LayoutLocalServiceUtil.deleteLayout(layout, false, serviceContext);
            }
        }
    }

    List<Layout> newLayouts = new ArrayList<Layout>();

    Set<Long> newLayoutIds = new HashSet<Long>();

    Map<Long, Layout> newLayoutsMap = (Map<Long, Layout>) portletDataContext.getNewPrimaryKeysMap(Layout.class);

    Element layoutsElement = rootElement.element("layouts");

    List<Element> layoutElements = layoutsElement.elements("layout");

    if (_log.isDebugEnabled()) {
        if (layoutElements.size() > 0) {
            _log.debug("Importing layouts");
        }
    }

    for (Element layoutElement : layoutElements) {
        importLayout(portletDataContext, user, layoutCache, previousLayouts, newLayouts, newLayoutsMap,
                newLayoutIds, portletsMergeMode, themeId, colorSchemeId, layoutsImportMode, privateLayout,
                importPermissions, importPublicLayoutPermissions, importUserPermissions, importThemeSettings,
                rootElement, layoutElement);
    }

    Element portletsElement = rootElement.element("portlets");

    List<Element> portletElements = portletsElement.elements("portlet");

    // Delete portlet data

    if (deletePortletData) {
        if (_log.isDebugEnabled()) {
            if (portletElements.size() > 0) {
                _log.debug("Deleting portlet data");
            }
        }

        for (Element portletElement : portletElements) {
            String portletId = portletElement.attributeValue("portlet-id");
            long layoutId = GetterUtil.getLong(portletElement.attributeValue("layout-id"));
            long plid = newLayoutsMap.get(layoutId).getPlid();

            portletDataContext.setPlid(plid);

            _portletImporter.deletePortletData(portletDataContext, portletId, plid);
        }
    }

    // Import portlets

    if (_log.isDebugEnabled()) {
        if (portletElements.size() > 0) {
            _log.debug("Importing portlets");
        }
    }

    for (Element portletElement : portletElements) {
        String portletPath = portletElement.attributeValue("path");
        String portletId = portletElement.attributeValue("portlet-id");
        long layoutId = GetterUtil.getLong(portletElement.attributeValue("layout-id"));
        long plid = newLayoutsMap.get(layoutId).getPlid();
        long oldPlid = GetterUtil.getLong(portletElement.attributeValue("old-plid"));

        Portlet portlet = PortletLocalServiceUtil.getPortletById(portletDataContext.getCompanyId(), portletId);

        if (!portlet.isActive() || portlet.isUndeployedPortlet()) {
            continue;
        }

        Layout layout = null;

        try {
            layout = LayoutUtil.findByPrimaryKey(plid);
        } catch (NoSuchLayoutException nsle) {
            continue;
        }

        portletDataContext.setPlid(plid);
        portletDataContext.setOldPlid(oldPlid);

        Document portletDocument = SAXReaderUtil.read(portletDataContext.getZipEntryAsString(portletPath));

        portletElement = portletDocument.getRootElement();

        // The order of the import is important. You must always import
        // the portlet preferences first, then the portlet data, then
        // the portlet permissions. The import of the portlet data
        // assumes that portlet preferences already exist.

        _portletImporter.setPortletScope(portletDataContext, portletElement);

        try {

            // Portlet preferences

            _portletImporter.importPortletPreferences(portletDataContext, layoutSet.getCompanyId(),
                    layout.getGroupId(), layout, null, portletElement, importPortletSetup,
                    importPortletArchivedSetups, importPortletUserPreferences, false);

            // Portlet data

            Element portletDataElement = portletElement.element("portlet-data");

            if (importPortletData && (portletDataElement != null)) {
                _portletImporter.importPortletData(portletDataContext, portletId, plid, portletDataElement);
            }
        } finally {
            _portletImporter.resetPortletScope(portletDataContext, layout.getGroupId());
        }

        // Portlet permissions

        if (importPermissions) {
            _permissionImporter.importPortletPermissions(layoutCache, companyId, groupId, userId, layout,
                    portletElement, portletId, importUserPermissions);
        }

        // Archived setups

        _portletImporter.importPortletPreferences(portletDataContext, layoutSet.getCompanyId(), groupId, null,
                null, portletElement, importPortletSetup, importPortletArchivedSetups,
                importPortletUserPreferences, false);
    }

    if (importPermissions) {
        if ((userId > 0) && ((PropsValues.PERMISSIONS_USER_CHECK_ALGORITHM == 5)
                || (PropsValues.PERMISSIONS_USER_CHECK_ALGORITHM == 6))) {

            Indexer indexer = IndexerRegistryUtil.getIndexer(User.class);

            indexer.reindex(userId);
        }
    }

    // Asset links

    _portletImporter.readAssetLinks(portletDataContext);

    // Delete missing layouts

    if (deleteMissingLayouts) {
        deleteMissingLayouts(groupId, privateLayout, newLayoutIds, previousLayouts, serviceContext);
    }

    // Page count

    LayoutSetLocalServiceUtil.updatePageCount(groupId, privateLayout);

    if (_log.isInfoEnabled()) {
        _log.info("Importing layouts takes " + stopWatch.getTime() + " ms");
    }

    // Site

    GroupLocalServiceUtil.updateSite(groupId, true);

    // Web content layout type

    for (Layout layout : newLayouts) {
        UnicodeProperties typeSettingsProperties = layout.getTypeSettingsProperties();

        String articleId = typeSettingsProperties.getProperty("article-id");

        if (Validator.isNotNull(articleId)) {
            Map<String, String> articleIds = (Map<String, String>) portletDataContext
                    .getNewPrimaryKeysMap(JournalArticle.class + ".articleId");

            typeSettingsProperties.setProperty("article-id",
                    MapUtil.getString(articleIds, articleId, articleId));

            LayoutUtil.update(layout, false);
        }
    }

    zipReader.close();
}

From source file:com.liferay.exportimport.controller.PortletImportController.java

protected void doImportPortletInfo(PortletDataContext portletDataContext, long userId) throws Exception {

    Map<String, String[]> parameterMap = portletDataContext.getParameterMap();

    boolean importPermissions = MapUtil.getBoolean(parameterMap, PortletDataHandlerKeys.PERMISSIONS);

    StopWatch stopWatch = new StopWatch();

    stopWatch.start();// ww w .ja  v  a  2 s.c  o  m

    ServiceContext serviceContext = ServiceContextThreadLocal.getServiceContext();

    if (serviceContext == null) {
        serviceContext = new ServiceContext();

        serviceContext.setCompanyId(portletDataContext.getCompanyId());
        serviceContext.setSignedIn(false);
        serviceContext.setUserId(userId);

        ServiceContextThreadLocal.pushServiceContext(serviceContext);
    }

    // LAR validation

    validateFile(portletDataContext.getCompanyId(), portletDataContext.getGroupId(),
            portletDataContext.getPortletId(), portletDataContext.getZipReader());

    // Source and target group id

    Map<Long, Long> groupIds = (Map<Long, Long>) portletDataContext.getNewPrimaryKeysMap(Group.class);

    groupIds.put(portletDataContext.getSourceGroupId(), portletDataContext.getGroupId());

    // Manifest

    ManifestSummary manifestSummary = _exportImportHelper.getManifestSummary(portletDataContext);

    if (BackgroundTaskThreadLocal.hasBackgroundTask()) {
        _portletDataHandlerStatusMessageSender.sendStatusMessage("portlet", portletDataContext.getPortletId(),
                manifestSummary);
    }

    portletDataContext.setManifestSummary(manifestSummary);

    // Read expando tables, locks and permissions to make them
    // available to the data handlers through the portlet data context

    Element rootElement = portletDataContext.getImportDataRootElement();

    Element portletElement = null;

    try {
        portletElement = rootElement.element("portlet");

        Document portletDocument = SAXReaderUtil
                .read(portletDataContext.getZipEntryAsString(portletElement.attributeValue("path")));

        portletElement = portletDocument.getRootElement();
    } catch (DocumentException de) {
        throw new SystemException("Unable to parse XML document for portlet "
                + portletDataContext.getPortletId() + " during import", de);
    }

    LayoutCache layoutCache = new LayoutCache();

    if (importPermissions) {
        _permissionImporter.checkRoles(layoutCache, portletDataContext.getCompanyId(),
                portletDataContext.getGroupId(), userId, portletElement);

        _permissionImporter.readPortletDataPermissions(portletDataContext);
    }

    String layoutsImportMode = MapUtil.getString(parameterMap, PortletDataHandlerKeys.LAYOUTS_IMPORT_MODE);

    if (!layoutsImportMode.equals(PortletDataHandlerKeys.LAYOUTS_IMPORT_MODE_CREATED_FROM_PROTOTYPE)) {

        readExpandoTables(portletDataContext);
    }

    readLocks(portletDataContext);

    Element portletDataElement = portletElement.element("portlet-data");

    Map<String, Boolean> importPortletControlsMap = _exportImportHelper.getImportPortletControlsMap(
            portletDataContext.getCompanyId(), portletDataContext.getPortletId(), parameterMap,
            portletDataElement, manifestSummary);

    Layout layout = _layoutLocalService.getLayout(portletDataContext.getPlid());

    try {

        // Portlet preferences

        importPortletPreferences(portletDataContext, layout.getCompanyId(), portletDataContext.getGroupId(),
                layout, portletElement, true,
                importPortletControlsMap.get(PortletDataHandlerKeys.PORTLET_ARCHIVED_SETUPS),
                importPortletControlsMap.get(PortletDataHandlerKeys.PORTLET_DATA),
                importPortletControlsMap.get(PortletDataHandlerKeys.PORTLET_SETUP),
                importPortletControlsMap.get(PortletDataHandlerKeys.PORTLET_USER_PREFERENCES));

        // Portlet data

        if (importPortletControlsMap.get(PortletDataHandlerKeys.PORTLET_DATA)) {

            if (_log.isDebugEnabled()) {
                _log.debug("Importing portlet data");
            }

            importPortletData(portletDataContext, portletDataElement);
        }
    } finally {
        resetPortletScope(portletDataContext, portletDataContext.getGroupId());
    }

    // Portlet permissions

    if (importPermissions) {
        if (_log.isDebugEnabled()) {
            _log.debug("Importing portlet permissions");
        }

        _permissionImporter.importPortletPermissions(layoutCache, portletDataContext.getCompanyId(),
                portletDataContext.getGroupId(), userId, layout, portletElement,
                portletDataContext.getPortletId());

        if (userId > 0) {
            Indexer<User> indexer = IndexerRegistryUtil.nullSafeGetIndexer(User.class);

            User user = _userLocalService.fetchUser(userId);

            indexer.reindex(user);
        }
    }

    // Asset links

    if (_log.isDebugEnabled()) {
        _log.debug("Importing asset links");
    }

    importAssetLinks(portletDataContext);

    // Deletion system events

    _deletionSystemEventImporter.importDeletionSystemEvents(portletDataContext);

    if (_log.isInfoEnabled()) {
        _log.info("Importing portlet takes " + stopWatch.getTime() + " ms");
    }

    // Service portlet preferences

    boolean importPortletSetup = importPortletControlsMap.get(PortletDataHandlerKeys.PORTLET_SETUP);

    if (importPortletSetup) {
        try {
            List<Element> serviceElements = rootElement.elements("service");

            for (Element serviceElement : serviceElements) {
                Document serviceDocument = SAXReaderUtil
                        .read(portletDataContext.getZipEntryAsString(serviceElement.attributeValue("path")));

                importServicePortletPreferences(portletDataContext, serviceDocument.getRootElement());
            }
        } catch (DocumentException de) {
            throw new SystemException("Unable to parse XML service information for portlet "
                    + portletDataContext.getPortletId() + " during import", de);
        } catch (PortalException pe) {
            throw new PortletDataException(
                    "Unable to import service preferences for portlet " + portletDataContext.getPortletId(),
                    pe);
        }
    }

    ZipReader zipReader = portletDataContext.getZipReader();

    zipReader.close();
}

From source file:com.liferay.portal.security.ldap.internal.exportimport.LDAPUserImporterImpl.java

protected User updateUser(LDAPImportContext ldapImportContext, LDAPUser ldapUser, User user, String password,
        String modifyTimestamp, boolean isNew) throws Exception {

    StopWatch stopWatch = new StopWatch();

    long companyId = ldapImportContext.getCompanyId();
    long ldapServerId = ldapImportContext.getLdapServerId();

    if (_log.isDebugEnabled()) {
        stopWatch.start();/*from w ww .ja  va 2s  . c  o m*/

        if (isNew) {
            _log.debug(StringBundler.concat("Updating new user ", String.valueOf(user), " from LDAP server ",
                    String.valueOf(ldapServerId), " to company ", String.valueOf(companyId)));
        } else {
            _log.debug(
                    StringBundler.concat("Updating existing user ", String.valueOf(user), " from LDAP server ",
                            String.valueOf(ldapServerId), " to company ", String.valueOf(companyId)));
        }
    }

    Date modifiedDate = null;

    LDAPImportConfiguration ldapImportConfiguration = _ldapImportConfigurationProvider
            .getConfiguration(companyId);

    boolean passwordReset = ldapUser.isPasswordReset();

    if (_ldapSettings.isExportEnabled(companyId)) {
        passwordReset = user.isPasswordReset();
    }

    try {
        if (Validator.isNotNull(modifyTimestamp)) {
            modifiedDate = LDAPUtil.parseDate(modifyTimestamp);

            if (modifiedDate.equals(user.getModifiedDate())) {
                if (ldapUser.isUpdatePassword() || !ldapImportConfiguration.importUserPasswordEnabled()) {

                    updateUserPassword(ldapImportConfiguration, user.getUserId(), user.getScreenName(),
                            password, passwordReset);
                }

                if (_log.isDebugEnabled()) {
                    _log.debug(StringBundler.concat("User ", user.getEmailAddress(),
                            " is already synchronized, but updated ", "password to avoid a blank value"));
                }

                return user;
            }
        } else if (!isNew) {
            if (_log.isInfoEnabled()) {
                _log.info("Skipping user " + user.getEmailAddress()
                        + " because the LDAP entry was never modified");
            }

            return user;
        }
    } catch (ParseException pe) {
        if (_log.isDebugEnabled()) {
            _log.debug("Unable to parse LDAP modify timestamp " + modifyTimestamp, pe);
        }
    }

    LDAPServerConfiguration ldapServerConfiguration = _ldapServerConfigurationProvider
            .getConfiguration(companyId, ldapServerId);

    String[] userIgnoreAttributes = ldapServerConfiguration.userIgnoreAttributes();

    Set<String> ldapUserIgnoreAttributes = new HashSet<>(Arrays.asList(userIgnoreAttributes));

    if (Validator.isNull(ldapUser.getScreenName()) || ldapUser.isAutoScreenName()) {

        ldapUser.setScreenName(user.getScreenName());
    }

    if (ldapUser.isUpdatePassword() || !ldapImportConfiguration.importUserPasswordEnabled()) {

        password = updateUserPassword(ldapImportConfiguration, user.getUserId(), ldapUser.getScreenName(),
                password, passwordReset);
    }

    Contact ldapContact = ldapUser.getContact();

    updateLDAPUser(ldapUser.getUser(), ldapContact, user, ldapImportContext.getUserMappings(),
            ldapImportContext.getContactMappings(), ldapUserIgnoreAttributes);

    Calendar birthdayCal = CalendarFactoryUtil.getCalendar();

    birthdayCal.setTime(ldapContact.getBirthday());

    int birthdayMonth = birthdayCal.get(Calendar.MONTH);
    int birthdayDay = birthdayCal.get(Calendar.DAY_OF_MONTH);
    int birthdayYear = birthdayCal.get(Calendar.YEAR);

    user = _userLocalService.updateUser(user.getUserId(), password, StringPool.BLANK, StringPool.BLANK,
            passwordReset, ldapUser.getReminderQueryQuestion(), ldapUser.getReminderQueryAnswer(),
            ldapUser.getScreenName(), ldapUser.getEmailAddress(), ldapUser.getFacebookId(),
            ldapUser.getOpenId(), ldapUser.isUpdatePortrait(), ldapUser.getPortraitBytes(),
            ldapUser.getLanguageId(), ldapUser.getTimeZoneId(), ldapUser.getGreeting(), ldapUser.getComments(),
            ldapUser.getFirstName(), ldapUser.getMiddleName(), ldapUser.getLastName(), ldapUser.getPrefixId(),
            ldapUser.getSuffixId(), ldapUser.isMale(), birthdayMonth, birthdayDay, birthdayYear,
            ldapUser.getSmsSn(), ldapUser.getFacebookSn(), ldapUser.getJabberSn(), ldapUser.getSkypeSn(),
            ldapUser.getTwitterSn(), ldapUser.getJobTitle(), ldapUser.getGroupIds(),
            ldapUser.getOrganizationIds(), ldapUser.getRoleIds(), ldapUser.getUserGroupRoles(),
            ldapUser.getUserGroupIds(), ldapUser.getServiceContext());

    ServiceContext serviceContext = new ServiceContext();

    if (modifiedDate != null) {
        serviceContext.setModifiedDate(modifiedDate);
    }

    user = _userLocalService.updateStatus(user.getUserId(), ldapUser.getStatus(), serviceContext);

    if (_log.isDebugEnabled()) {
        _log.debug(StringBundler.concat("Finished update for user ", String.valueOf(user), " in ",
                String.valueOf(stopWatch.getTime()), "ms"));
    }

    return user;
}

From source file:com.liferay.exportimport.controller.PortletExportController.java

protected File doExport(PortletDataContext portletDataContext) throws Exception {

    boolean exportPermissions = MapUtil.getBoolean(portletDataContext.getParameterMap(),
            PortletDataHandlerKeys.PERMISSIONS);

    if (_log.isDebugEnabled()) {
        _log.debug("Export permissions " + exportPermissions);
    }//from w w  w. j a  v a  2  s .  c  o m

    StopWatch stopWatch = new StopWatch();

    stopWatch.start();

    Layout layout = _layoutLocalService.getLayout(portletDataContext.getPlid());

    if (!layout.isTypeControlPanel() && !layout.isTypePanel() && !layout.isTypePortlet()) {

        StringBundler sb = new StringBundler(4);

        sb.append("Unable to export layout ");
        sb.append(layout.getPlid());
        sb.append(" because it has an invalid type: ");
        sb.append(layout.getType());

        throw new LayoutImportException(sb.toString());
    }

    ServiceContext serviceContext = ServiceContextThreadLocal.getServiceContext();

    if (serviceContext == null) {
        serviceContext = new ServiceContext();

        serviceContext.setCompanyId(layout.getCompanyId());
        serviceContext.setSignedIn(false);

        long defaultUserId = _userLocalService.getDefaultUserId(layout.getCompanyId());

        serviceContext.setUserId(defaultUserId);

        ServiceContextThreadLocal.pushServiceContext(serviceContext);
    }

    long layoutSetBranchId = MapUtil.getLong(portletDataContext.getParameterMap(), "layoutSetBranchId");

    serviceContext.setAttribute("layoutSetBranchId", layoutSetBranchId);

    long scopeGroupId = portletDataContext.getGroupId();

    javax.portlet.PortletPreferences jxPortletPreferences = PortletPreferencesFactoryUtil
            .getLayoutPortletSetup(layout, portletDataContext.getPortletId());

    String scopeType = GetterUtil.getString(jxPortletPreferences.getValue("lfrScopeType", null));
    String scopeLayoutUuid = GetterUtil.getString(jxPortletPreferences.getValue("lfrScopeLayoutUuid", null));

    if (Validator.isNotNull(scopeType)) {
        Group scopeGroup = null;

        if (scopeType.equals("company")) {
            scopeGroup = _groupLocalService.getCompanyGroup(layout.getCompanyId());
        } else if (Validator.isNotNull(scopeLayoutUuid)) {
            scopeGroup = layout.getScopeGroup();
        }

        if (scopeGroup != null) {
            scopeGroupId = scopeGroup.getGroupId();
        }
    }

    portletDataContext.setScopeType(scopeType);
    portletDataContext.setScopeLayoutUuid(scopeLayoutUuid);

    Document document = SAXReaderUtil.createDocument();

    Element rootElement = document.addElement("root");

    portletDataContext.setExportDataRootElement(rootElement);

    Element headerElement = rootElement.addElement("header");

    headerElement.addAttribute("available-locales", StringUtil.merge(
            LanguageUtil.getAvailableLocales(_portal.getSiteGroupId(portletDataContext.getScopeGroupId()))));
    headerElement.addAttribute("build-number", String.valueOf(ReleaseInfo.getBuildNumber()));
    headerElement.addAttribute("export-date", Time.getRFC822());

    if (portletDataContext.hasDateRange()) {
        headerElement.addAttribute("start-date", String.valueOf(portletDataContext.getStartDate()));
        headerElement.addAttribute("end-date", String.valueOf(portletDataContext.getEndDate()));
    }

    headerElement.addAttribute("type", portletDataContext.getType());
    headerElement.addAttribute("company-id", String.valueOf(portletDataContext.getCompanyId()));
    headerElement.addAttribute("company-group-id", String.valueOf(portletDataContext.getCompanyGroupId()));
    headerElement.addAttribute("group-id", String.valueOf(scopeGroupId));
    headerElement.addAttribute("user-personal-site-group-id",
            String.valueOf(portletDataContext.getUserPersonalSiteGroupId()));
    headerElement.addAttribute("private-layout", String.valueOf(layout.isPrivateLayout()));
    headerElement.addAttribute("root-portlet-id", portletDataContext.getRootPortletId());
    headerElement.addAttribute("schema-version", ExportImportConstants.EXPORT_IMPORT_SCHEMA_VERSION);

    Element missingReferencesElement = rootElement.addElement("missing-references");

    portletDataContext.setMissingReferencesElement(missingReferencesElement);

    Map<String, Boolean> exportPortletControlsMap = _exportImportHelper.getExportPortletControlsMap(
            layout.getCompanyId(), portletDataContext.getPortletId(), portletDataContext.getParameterMap());

    exportPortlet(portletDataContext, layout.getPlid(), rootElement, exportPermissions,
            exportPortletControlsMap.get(PortletDataHandlerKeys.PORTLET_ARCHIVED_SETUPS),
            exportPortletControlsMap.get(PortletDataHandlerKeys.PORTLET_DATA),
            exportPortletControlsMap.get(PortletDataHandlerKeys.PORTLET_SETUP),
            exportPortletControlsMap.get(PortletDataHandlerKeys.PORTLET_USER_PREFERENCES));
    exportService(portletDataContext, rootElement,
            exportPortletControlsMap.get(PortletDataHandlerKeys.PORTLET_SETUP));

    exportAssetLinks(portletDataContext);
    exportExpandoTables(portletDataContext);
    exportLocks(portletDataContext);

    portletDataContext.addDeletionSystemEventStagedModelTypes(new StagedModelType(StagedAssetLink.class));

    _deletionSystemEventExporter.exportDeletionSystemEvents(portletDataContext);

    if (exportPermissions) {
        _permissionExporter.exportPortletDataPermissions(portletDataContext);
    }

    _exportImportHelper.writeManifestSummary(document, portletDataContext.getManifestSummary());

    if (_log.isInfoEnabled()) {
        _log.info("Exporting portlet took " + stopWatch.getTime() + " ms");
    }

    try {
        portletDataContext.addZipEntry("/manifest.xml", document.formattedString());
    } catch (IOException ioe) {
        throw new SystemException("Unable to create the export LAR manifest file for portlet "
                + portletDataContext.getPortletId(), ioe);
    }

    ZipWriter zipWriter = portletDataContext.getZipWriter();

    return zipWriter.getFile();
}

From source file:com.liferay.portal.lar.PortletImporter.java

protected void doImportPortletInfo(long userId, long plid, long groupId, String portletId,
        Map<String, String[]> parameterMap, File file) throws Exception {

    boolean deletePortletData = MapUtil.getBoolean(parameterMap, PortletDataHandlerKeys.DELETE_PORTLET_DATA);
    boolean importPermissions = MapUtil.getBoolean(parameterMap, PortletDataHandlerKeys.PERMISSIONS);
    boolean importUserPermissions = MapUtil.getBoolean(parameterMap, PortletDataHandlerKeys.PERMISSIONS);
    boolean importPortletData = MapUtil.getBoolean(parameterMap, PortletDataHandlerKeys.PORTLET_DATA);
    boolean importPortletArchivedSetups = MapUtil.getBoolean(parameterMap,
            PortletDataHandlerKeys.PORTLET_ARCHIVED_SETUPS);
    boolean importPortletSetup = MapUtil.getBoolean(parameterMap, PortletDataHandlerKeys.PORTLET_SETUP);
    boolean importPortletUserPreferences = MapUtil.getBoolean(parameterMap,
            PortletDataHandlerKeys.PORTLET_USER_PREFERENCES);
    String userIdStrategyString = MapUtil.getString(parameterMap, PortletDataHandlerKeys.USER_ID_STRATEGY);

    StopWatch stopWatch = null;

    if (_log.isInfoEnabled()) {
        stopWatch = new StopWatch();

        stopWatch.start();//from   w  w  w  .  ja  v a  2 s  .  com
    }

    Layout layout = LayoutLocalServiceUtil.getLayout(plid);

    User user = UserUtil.findByPrimaryKey(userId);

    UserIdStrategy userIdStrategy = getUserIdStrategy(user, userIdStrategyString);

    ZipReader zipReader = ZipReaderFactoryUtil.getZipReader(file);

    PortletDataContext portletDataContext = new PortletDataContextImpl(layout.getCompanyId(), groupId,
            parameterMap, new HashSet<String>(), userIdStrategy, zipReader);

    portletDataContext.setPortetDataContextListener(new PortletDataContextListenerImpl(portletDataContext));

    portletDataContext.setPlid(plid);
    portletDataContext.setPrivateLayout(layout.isPrivateLayout());

    // Manifest

    String xml = portletDataContext.getZipEntryAsString("/manifest.xml");

    Element rootElement = null;

    try {
        Document document = SAXReaderUtil.read(xml);

        rootElement = document.getRootElement();
    } catch (Exception e) {
        throw new LARFileException("Unable to read /manifest.xml");
    }

    // Build compatibility

    Element headerElement = rootElement.element("header");

    int buildNumber = ReleaseInfo.getBuildNumber();

    int importBuildNumber = GetterUtil.getInteger(headerElement.attributeValue("build-number"));

    if (buildNumber != importBuildNumber) {
        throw new LayoutImportException("LAR build number " + importBuildNumber + " does not match "
                + "portal build number " + buildNumber);
    }

    // Type compatibility

    String type = headerElement.attributeValue("type");

    if (!type.equals("portlet")) {
        throw new LARTypeException("Invalid type of LAR file (" + type + ")");
    }

    // Portlet compatibility

    String rootPortletId = headerElement.attributeValue("root-portlet-id");

    if (!PortletConstants.getRootPortletId(portletId).equals(rootPortletId)) {

        throw new PortletIdException("Invalid portlet id " + rootPortletId);
    }

    // Import group id

    long sourceGroupId = GetterUtil.getLong(headerElement.attributeValue("group-id"));

    portletDataContext.setSourceGroupId(sourceGroupId);

    // Read asset categories, asset tags, comments, locks, and ratings
    // entries to make them available to the data handlers through the
    // context

    if (importPermissions) {
        _permissionImporter.readPortletDataPermissions(portletDataContext);
    }

    readAssetCategories(portletDataContext);
    readAssetTags(portletDataContext);
    readComments(portletDataContext);
    readExpandoTables(portletDataContext);
    readLocks(portletDataContext);
    readRatingsEntries(portletDataContext);

    // Delete portlet data

    if (_log.isDebugEnabled()) {
        _log.debug("Deleting portlet data");
    }

    if (deletePortletData) {
        deletePortletData(portletDataContext, portletId, plid);
    }

    Element portletElement = null;

    try {
        portletElement = rootElement.element("portlet");

        Document portletDocument = SAXReaderUtil
                .read(portletDataContext.getZipEntryAsString(portletElement.attributeValue("path")));

        portletElement = portletDocument.getRootElement();
    } catch (DocumentException de) {
        throw new SystemException(de);
    }

    setPortletScope(portletDataContext, portletElement);

    try {

        // Portlet preferences

        importPortletPreferences(portletDataContext, layout.getCompanyId(), groupId, layout, portletId,
                portletElement, importPortletSetup, importPortletArchivedSetups, importPortletUserPreferences,
                true);

        // Portlet data

        Element portletDataElement = portletElement.element("portlet-data");

        if (importPortletData && (portletDataElement != null)) {
            if (_log.isDebugEnabled()) {
                _log.debug("Importing portlet data");
            }

            importPortletData(portletDataContext, portletId, plid, portletDataElement);
        }
    } finally {
        resetPortletScope(portletDataContext, groupId);
    }

    // Portlet permissions

    if (importPermissions) {
        if (_log.isDebugEnabled()) {
            _log.debug("Importing portlet permissions");
        }

        LayoutCache layoutCache = new LayoutCache();

        _permissionImporter.importPortletPermissions(layoutCache, layout.getCompanyId(), groupId, userId,
                layout, portletElement, portletId, importUserPermissions);

        if ((userId > 0) && ((PropsValues.PERMISSIONS_USER_CHECK_ALGORITHM == 5)
                || (PropsValues.PERMISSIONS_USER_CHECK_ALGORITHM == 6))) {

            Indexer indexer = IndexerRegistryUtil.getIndexer(User.class);

            indexer.reindex(userId);
        }
    }

    // Asset links

    if (_log.isDebugEnabled()) {
        _log.debug("Importing asset links");
    }

    readAssetLinks(portletDataContext);

    if (_log.isInfoEnabled()) {
        _log.info("Importing portlet takes " + stopWatch.getTime() + " ms");
    }

    zipReader.close();
}

From source file:com.liferay.exportimport.controller.LayoutImportController.java

protected void doImportFile(PortletDataContext portletDataContext, long userId) throws Exception {

    Map<String, String[]> parameterMap = portletDataContext.getParameterMap();

    Group group = _groupLocalService.getGroup(portletDataContext.getGroupId());

    String layoutsImportMode = MapUtil.getString(parameterMap, PortletDataHandlerKeys.LAYOUTS_IMPORT_MODE,
            PortletDataHandlerKeys.LAYOUTS_IMPORT_MODE_MERGE_BY_LAYOUT_UUID);
    boolean permissions = MapUtil.getBoolean(parameterMap, PortletDataHandlerKeys.PERMISSIONS);

    if (group.isLayoutSetPrototype()) {
        parameterMap.put(PortletDataHandlerKeys.LAYOUT_SET_PROTOTYPE_LINK_ENABLED,
                new String[] { Boolean.FALSE.toString() });
    }/*from www.  j  a  va  2 s  .  c om*/

    if (_log.isDebugEnabled()) {
        _log.debug("Import permissions " + permissions);
    }

    StopWatch stopWatch = new StopWatch();

    stopWatch.start();

    LayoutCache layoutCache = new LayoutCache();

    long companyId = portletDataContext.getCompanyId();

    ServiceContext serviceContext = ServiceContextThreadLocal.getServiceContext();

    if (serviceContext == null) {
        serviceContext = new ServiceContext();
    }

    serviceContext.setCompanyId(companyId);
    serviceContext.setSignedIn(false);
    serviceContext.setUserId(userId);

    ServiceContextThreadLocal.pushServiceContext(serviceContext);

    // LAR validation

    validateFile(companyId, portletDataContext.getGroupId(), parameterMap, portletDataContext.getZipReader());

    // Source and target group id

    Map<Long, Long> groupIds = (Map<Long, Long>) portletDataContext.getNewPrimaryKeysMap(Group.class);

    groupIds.put(portletDataContext.getSourceGroupId(), portletDataContext.getGroupId());

    // Manifest

    ManifestSummary manifestSummary = _exportImportHelper.getManifestSummary(portletDataContext);

    portletDataContext.setManifestSummary(manifestSummary);

    // Layout and layout set prototype

    Element rootElement = portletDataContext.getImportDataRootElement();

    Element headerElement = rootElement.element("header");

    String layoutSetPrototypeUuid = headerElement.attributeValue("layout-set-prototype-uuid");

    String larType = headerElement.attributeValue("type");

    portletDataContext.setType(larType);

    if (group.isLayoutPrototype() && larType.equals("layout-prototype")) {
        parameterMap.put(PortletDataHandlerKeys.DELETE_MISSING_LAYOUTS,
                new String[] { Boolean.FALSE.toString() });

        LayoutPrototype layoutPrototype = _layoutPrototypeLocalService.getLayoutPrototype(group.getClassPK());

        String layoutPrototypeUuid = GetterUtil.getString(headerElement.attributeValue("type-uuid"));

        LayoutPrototype existingLayoutPrototype = null;

        if (Validator.isNotNull(layoutPrototypeUuid)) {
            try {
                existingLayoutPrototype = _layoutPrototypeLocalService
                        .getLayoutPrototypeByUuidAndCompanyId(layoutPrototypeUuid, companyId);
            } catch (NoSuchLayoutPrototypeException nslpe) {

                // LPS-52675

                if (_log.isDebugEnabled()) {
                    _log.debug(nslpe, nslpe);
                }
            }
        }

        if (existingLayoutPrototype == null) {
            List<Layout> layouts = _layoutLocalService
                    .getLayoutsByLayoutPrototypeUuid(layoutPrototype.getUuid());

            layoutPrototype.setUuid(layoutPrototypeUuid);

            _layoutPrototypeLocalService.updateLayoutPrototype(layoutPrototype);

            for (Layout layout : layouts) {
                layout.setLayoutPrototypeUuid(layoutPrototypeUuid);

                _layoutLocalService.updateLayout(layout);
            }
        }
    } else if (group.isLayoutSetPrototype() && larType.equals("layout-set-prototype")) {

        parameterMap.put(PortletDataHandlerKeys.LAYOUT_SET_PROTOTYPE_SETTINGS,
                new String[] { Boolean.TRUE.toString() });

        LayoutSetPrototype layoutSetPrototype = _layoutSetPrototypeLocalService
                .getLayoutSetPrototype(group.getClassPK());

        String importedLayoutSetPrototypeUuid = GetterUtil.getString(headerElement.attributeValue("type-uuid"));

        LayoutSetPrototype existingLayoutSetPrototype = null;

        if (Validator.isNotNull(importedLayoutSetPrototypeUuid)) {
            try {
                existingLayoutSetPrototype = _layoutSetPrototypeLocalService
                        .getLayoutSetPrototypeByUuidAndCompanyId(importedLayoutSetPrototypeUuid, companyId);
            } catch (NoSuchLayoutSetPrototypeException nslspe) {

                // LPS-52675

                if (_log.isDebugEnabled()) {
                    _log.debug(nslspe, nslspe);
                }
            }
        }

        if (existingLayoutSetPrototype == null) {
            List<LayoutSet> layoutSets = _layoutSetLocalService
                    .getLayoutSetsByLayoutSetPrototypeUuid(layoutSetPrototype.getUuid());

            layoutSetPrototype.setUuid(importedLayoutSetPrototypeUuid);

            _layoutSetPrototypeLocalService.updateLayoutSetPrototype(layoutSetPrototype);

            for (LayoutSet curLayoutSet : layoutSets) {
                curLayoutSet.setLayoutSetPrototypeUuid(importedLayoutSetPrototypeUuid);

                _layoutSetLocalService.updateLayoutSet(curLayoutSet);
            }
        }
    } else if (larType.equals("layout-set-prototype")) {
        parameterMap.put(PortletDataHandlerKeys.LAYOUT_SET_PROTOTYPE_SETTINGS,
                new String[] { Boolean.TRUE.toString() });

        layoutSetPrototypeUuid = GetterUtil.getString(headerElement.attributeValue("type-uuid"));
    }

    if (Validator.isNotNull(layoutSetPrototypeUuid)) {
        portletDataContext.setLayoutSetPrototypeUuid(layoutSetPrototypeUuid);
    }

    List<Element> portletElements = fetchPortletElements(rootElement);

    if (permissions) {
        for (Element portletElement : portletElements) {
            String portletPath = portletElement.attributeValue("path");

            Document portletDocument = SAXReaderUtil.read(portletDataContext.getZipEntryAsString(portletPath));

            _permissionImporter.checkRoles(layoutCache, companyId, portletDataContext.getGroupId(), userId,
                    portletDocument.getRootElement());
        }

        _permissionImporter.readPortletDataPermissions(portletDataContext);
    }

    if (!layoutsImportMode.equals(PortletDataHandlerKeys.LAYOUTS_IMPORT_MODE_CREATED_FROM_PROTOTYPE)) {

        _portletImportController.readExpandoTables(portletDataContext);
    }

    _portletImportController.readLocks(portletDataContext);

    // Import the group

    Element groupsElement = portletDataContext.getImportDataGroupElement(StagedGroup.class);

    for (Element groupElement : groupsElement.elements()) {
        StagedModelDataHandlerUtil.importStagedModel(portletDataContext, groupElement);
    }

    // Asset links

    _portletImportController.importAssetLinks(portletDataContext);

    // Site

    _groupLocalService.updateSite(portletDataContext.getGroupId(), true);

    if (_log.isInfoEnabled()) {
        _log.info("Importing layouts takes " + stopWatch.getTime() + " ms");
    }

    ZipReader zipReader = portletDataContext.getZipReader();

    zipReader.close();
}

From source file:com.liferay.portal.lar.LayoutExporter.java

protected File doExportLayoutsAsFile(long groupId, boolean privateLayout, long[] layoutIds,
        Map<String, String[]> parameterMap, Date startDate, Date endDate) throws Exception {

    boolean exportCategories = MapUtil.getBoolean(parameterMap, PortletDataHandlerKeys.CATEGORIES);
    boolean exportIgnoreLastPublishDate = MapUtil.getBoolean(parameterMap,
            PortletDataHandlerKeys.IGNORE_LAST_PUBLISH_DATE);
    boolean exportPermissions = MapUtil.getBoolean(parameterMap, PortletDataHandlerKeys.PERMISSIONS);
    boolean exportUserPermissions = MapUtil.getBoolean(parameterMap, PortletDataHandlerKeys.USER_PERMISSIONS);
    boolean exportPortletArchivedSetups = MapUtil.getBoolean(parameterMap,
            PortletDataHandlerKeys.PORTLET_ARCHIVED_SETUPS);
    boolean exportPortletUserPreferences = MapUtil.getBoolean(parameterMap,
            PortletDataHandlerKeys.PORTLET_USER_PREFERENCES);
    boolean exportTheme = MapUtil.getBoolean(parameterMap, PortletDataHandlerKeys.THEME);
    boolean exportThemeSettings = MapUtil.getBoolean(parameterMap, PortletDataHandlerKeys.THEME_REFERENCE);
    boolean publishToRemote = MapUtil.getBoolean(parameterMap, PortletDataHandlerKeys.PUBLISH_TO_REMOTE);
    boolean updateLastPublishDate = MapUtil.getBoolean(parameterMap,
            PortletDataHandlerKeys.UPDATE_LAST_PUBLISH_DATE);

    if (_log.isDebugEnabled()) {
        _log.debug("Export categories " + exportCategories);
        _log.debug("Export permissions " + exportPermissions);
        _log.debug("Export user permissions " + exportUserPermissions);
        _log.debug("Export portlet archived setups " + exportPortletArchivedSetups);
        _log.debug("Export portlet user preferences " + exportPortletUserPreferences);
        _log.debug("Export theme " + exportTheme);
    }/*from w w  w  . j a  va 2 s.  c  o m*/

    LayoutSet layoutSet = LayoutSetLocalServiceUtil.getLayoutSet(groupId, privateLayout);

    long companyId = layoutSet.getCompanyId();
    long defaultUserId = UserLocalServiceUtil.getDefaultUserId(companyId);

    ServiceContext serviceContext = ServiceContextThreadLocal.getServiceContext();

    if (serviceContext == null) {
        serviceContext = new ServiceContext();

        serviceContext.setCompanyId(companyId);
        serviceContext.setSignedIn(false);
        serviceContext.setUserId(defaultUserId);

        ServiceContextThreadLocal.pushServiceContext(serviceContext);
    }

    serviceContext.setAttribute("exporting", Boolean.TRUE);

    long layoutSetBranchId = MapUtil.getLong(parameterMap, "layoutSetBranchId");

    serviceContext.setAttribute("layoutSetBranchId", layoutSetBranchId);

    long lastPublishDate = System.currentTimeMillis();

    if (endDate != null) {
        lastPublishDate = endDate.getTime();
    }

    if (exportIgnoreLastPublishDate) {
        endDate = null;
        startDate = null;
    }

    StopWatch stopWatch = null;

    if (_log.isInfoEnabled()) {
        stopWatch = new StopWatch();

        stopWatch.start();
    }

    LayoutCache layoutCache = new LayoutCache();

    ZipWriter zipWriter = ZipWriterFactoryUtil.getZipWriter();

    PortletDataContext portletDataContext = new PortletDataContextImpl(companyId, groupId, parameterMap,
            new HashSet<String>(), startDate, endDate, zipWriter);

    portletDataContext.setPortetDataContextListener(new PortletDataContextListenerImpl(portletDataContext));

    Document document = SAXReaderUtil.createDocument();

    Element rootElement = document.addElement("root");

    Element headerElement = rootElement.addElement("header");

    headerElement.addAttribute("build-number", String.valueOf(ReleaseInfo.getBuildNumber()));
    headerElement.addAttribute("export-date", Time.getRFC822());

    if (portletDataContext.hasDateRange()) {
        headerElement.addAttribute("start-date", String.valueOf(portletDataContext.getStartDate()));
        headerElement.addAttribute("end-date", String.valueOf(portletDataContext.getEndDate()));
    }

    headerElement.addAttribute("type", "layout-set");
    headerElement.addAttribute("group-id", String.valueOf(groupId));
    headerElement.addAttribute("private-layout", String.valueOf(privateLayout));

    Group group = layoutSet.getGroup();

    if (group.isLayoutSetPrototype()) {
        LayoutSetPrototype layoutSetPrototype = LayoutSetPrototypeLocalServiceUtil
                .getLayoutSetPrototype(group.getClassPK());

        String layoutSetPrototypeUuid = layoutSetPrototype.getUuid();

        headerElement.addAttribute("layout-set-prototype-uuid", layoutSetPrototypeUuid);

        if (publishToRemote) {
            String path = getLayoutSetPrototype(portletDataContext, layoutSetPrototypeUuid);

            File layoutSetPrototypeFile = SitesUtil.exportLayoutSetPrototype(layoutSetPrototype,
                    serviceContext);

            try {
                portletDataContext.addZipEntry(path.concat(".lar"),
                        new FileInputStream(layoutSetPrototypeFile));
                portletDataContext.addZipEntry(path.concat(".xml"), layoutSetPrototype);
            } finally {
                layoutSetPrototypeFile.delete();
            }
        }
    }

    if (exportTheme || exportThemeSettings) {
        headerElement.addAttribute("theme-id", layoutSet.getThemeId());
        headerElement.addAttribute("color-scheme-id", layoutSet.getColorSchemeId());
    }

    Element cssElement = headerElement.addElement("css");

    cssElement.addCDATA(layoutSet.getCss());

    Portlet layoutConfigurationPortlet = PortletLocalServiceUtil
            .getPortletById(portletDataContext.getCompanyId(), PortletKeys.LAYOUT_CONFIGURATION);

    Map<String, Object[]> portletIds = new LinkedHashMap<String, Object[]>();

    List<Layout> layouts = null;

    if ((layoutIds == null) || (layoutIds.length == 0)) {
        layouts = LayoutLocalServiceUtil.getLayouts(groupId, privateLayout);
    } else {
        layouts = LayoutLocalServiceUtil.getLayouts(groupId, privateLayout, layoutIds);
    }

    List<Portlet> portlets = getAlwaysExportablePortlets(companyId);

    if (!layouts.isEmpty()) {
        Layout firstLayout = layouts.get(0);

        if (group.isStagingGroup()) {
            group = group.getLiveGroup();
        }

        for (Portlet portlet : portlets) {
            String portletId = portlet.getRootPortletId();

            if (!group.isStagedPortlet(portletId)) {
                continue;
            }

            String key = PortletPermissionUtil.getPrimaryKey(0, portletId);

            if (portletIds.get(key) == null) {
                portletIds.put(key, new Object[] { portletId, firstLayout.getPlid(), groupId, StringPool.BLANK,
                        StringPool.BLANK });
            }
        }
    }

    Element layoutsElement = rootElement.addElement("layouts");

    for (Layout layout : layouts) {
        exportLayout(portletDataContext, layoutConfigurationPortlet, layoutCache, portlets, portletIds,
                exportPermissions, exportUserPermissions, layout, layoutsElement);
    }

    if (PropsValues.PERMISSIONS_USER_CHECK_ALGORITHM < 5) {
        Element rolesElement = rootElement.addElement("roles");

        if (exportPermissions) {
            _permissionExporter.exportLayoutRoles(layoutCache, companyId, groupId, rolesElement);
        }
    }

    long previousScopeGroupId = portletDataContext.getScopeGroupId();

    Element portletsElement = rootElement.addElement("portlets");

    for (Map.Entry<String, Object[]> portletIdsEntry : portletIds.entrySet()) {

        Object[] portletObjects = portletIdsEntry.getValue();

        String portletId = null;
        long plid = 0;
        long scopeGroupId = 0;
        String scopeType = StringPool.BLANK;
        String scopeLayoutUuid = null;

        if (portletObjects.length == 4) {
            portletId = (String) portletIdsEntry.getValue()[0];
            plid = (Long) portletIdsEntry.getValue()[1];
            scopeGroupId = (Long) portletIdsEntry.getValue()[2];
            scopeLayoutUuid = (String) portletIdsEntry.getValue()[3];
        } else {
            portletId = (String) portletIdsEntry.getValue()[0];
            plid = (Long) portletIdsEntry.getValue()[1];
            scopeGroupId = (Long) portletIdsEntry.getValue()[2];
            scopeType = (String) portletIdsEntry.getValue()[3];
            scopeLayoutUuid = (String) portletIdsEntry.getValue()[4];
        }

        Layout layout = LayoutLocalServiceUtil.getLayout(plid);

        portletDataContext.setPlid(layout.getPlid());
        portletDataContext.setOldPlid(layout.getPlid());
        portletDataContext.setScopeGroupId(scopeGroupId);
        portletDataContext.setScopeType(scopeType);
        portletDataContext.setScopeLayoutUuid(scopeLayoutUuid);

        boolean[] exportPortletControls = getExportPortletControls(companyId, portletId, portletDataContext,
                parameterMap);

        _portletExporter.exportPortlet(portletDataContext, layoutCache, portletId, layout, portletsElement,
                defaultUserId, exportPermissions, exportPortletArchivedSetups, exportPortletControls[0],
                exportPortletControls[1], exportPortletUserPreferences, exportUserPermissions);
    }

    portletDataContext.setScopeGroupId(previousScopeGroupId);

    if (exportCategories) {
        exportAssetCategories(portletDataContext);
    }

    _portletExporter.exportAssetLinks(portletDataContext);
    _portletExporter.exportAssetTags(portletDataContext);
    _portletExporter.exportComments(portletDataContext);
    _portletExporter.exportExpandoTables(portletDataContext);
    _portletExporter.exportLocks(portletDataContext);

    if (exportPermissions) {
        _permissionExporter.exportPortletDataPermissions(portletDataContext);
    }

    _portletExporter.exportRatingsEntries(portletDataContext, rootElement);

    if (exportTheme && !portletDataContext.isPerformDirectBinaryImport()) {
        exportTheme(layoutSet, zipWriter);
    }

    if (_log.isInfoEnabled()) {
        if (stopWatch != null) {
            _log.info("Exporting layouts takes " + stopWatch.getTime() + " ms");
        } else {
            _log.info("Exporting layouts is finished");
        }
    }

    portletDataContext.addZipEntry("/manifest.xml", document.formattedString());

    try {
        return zipWriter.getFile();
    } finally {
        if (updateLastPublishDate) {
            updateLastPublishDate(layoutSet, lastPublishDate);
        }
    }
}

From source file:com.liferay.portal.lar.PlaytechPortalLayoutImporter.java

protected void doImportLayouts(long userId, long groupId, boolean privateLayout,
        Map<String, String[]> parameterMap, File file) throws Exception {

    boolean deleteMissingLayouts = MapUtil.getBoolean(parameterMap,
            PortletDataHandlerKeys.DELETE_MISSING_LAYOUTS, Boolean.TRUE.booleanValue());
    boolean deletePortletData = MapUtil.getBoolean(parameterMap, PortletDataHandlerKeys.DELETE_PORTLET_DATA);
    boolean importCategories = MapUtil.getBoolean(parameterMap, PortletDataHandlerKeys.CATEGORIES);
    boolean importPermissions = MapUtil.getBoolean(parameterMap, PortletDataHandlerKeys.PERMISSIONS);
    boolean importPublicLayoutPermissions = MapUtil.getBoolean(parameterMap,
            PortletDataHandlerKeys.PUBLIC_LAYOUT_PERMISSIONS);
    boolean importUserPermissions = MapUtil.getBoolean(parameterMap, PortletDataHandlerKeys.USER_PERMISSIONS);
    boolean importPortletData = MapUtil.getBoolean(parameterMap, PortletDataHandlerKeys.PORTLET_DATA);
    boolean importPortletSetup = MapUtil.getBoolean(parameterMap, PortletDataHandlerKeys.PORTLET_SETUP);
    boolean importPortletArchivedSetups = MapUtil.getBoolean(parameterMap,
            PortletDataHandlerKeys.PORTLET_ARCHIVED_SETUPS);
    boolean importPortletUserPreferences = MapUtil.getBoolean(parameterMap,
            PortletDataHandlerKeys.PORTLET_USER_PREFERENCES);
    boolean importTheme = MapUtil.getBoolean(parameterMap, PortletDataHandlerKeys.THEME);
    boolean importThemeSettings = MapUtil.getBoolean(parameterMap, PortletDataHandlerKeys.THEME_REFERENCE);
    boolean importLogo = MapUtil.getBoolean(parameterMap, PortletDataHandlerKeys.LOGO);
    boolean importLayoutSetSettings = MapUtil.getBoolean(parameterMap,
            PortletDataHandlerKeys.LAYOUT_SET_SETTINGS);

    boolean layoutSetPrototypeLinkEnabled = MapUtil.getBoolean(parameterMap,
            PortletDataHandlerKeys.LAYOUT_SET_PROTOTYPE_LINK_ENABLED, true);

    Group group = GroupLocalServiceUtil.getGroup(groupId);

    if (group.isLayoutSetPrototype()) {
        layoutSetPrototypeLinkEnabled = false;
    }/*  w  w w.j ava2s . c o m*/

    //boolean publishToRemote = MapUtil.getBoolean(
    //   parameterMap, PortletDataHandlerKeys.PUBLISH_TO_REMOTE);
    String layoutsImportMode = MapUtil.getString(parameterMap, PortletDataHandlerKeys.LAYOUTS_IMPORT_MODE,
            PortletDataHandlerKeys.LAYOUTS_IMPORT_MODE_MERGE_BY_LAYOUT_UUID);
    String portletsMergeMode = MapUtil.getString(parameterMap, PortletDataHandlerKeys.PORTLETS_MERGE_MODE,
            PortletDataHandlerKeys.PORTLETS_MERGE_MODE_REPLACE);
    String userIdStrategy = MapUtil.getString(parameterMap, PortletDataHandlerKeys.USER_ID_STRATEGY);

    if (_log.isDebugEnabled()) {
        _log.debug("Delete portlet data " + deletePortletData);
        _log.debug("Import categories " + importCategories);
        _log.debug("Import permissions " + importPermissions);
        _log.debug("Import user permissions " + importUserPermissions);
        _log.debug("Import portlet data " + importPortletData);
        _log.debug("Import portlet setup " + importPortletSetup);
        _log.debug("Import portlet archived setups " + importPortletArchivedSetups);
        _log.debug("Import portlet user preferences " + importPortletUserPreferences);
        _log.debug("Import theme " + importTheme);
    }

    StopWatch stopWatch = null;

    if (_log.isInfoEnabled()) {
        stopWatch = new StopWatch();

        stopWatch.start();
    }

    long processedItems = 0;

    FinderCacheUtil.clearCache();
    LayoutCache layoutCache = new LayoutCache();

    LayoutSet layoutSet = LayoutSetLocalServiceUtil.getLayoutSet(groupId, privateLayout);

    long companyId = layoutSet.getCompanyId();

    User user = UserUtil.findByPrimaryKey(userId);

    UserIdStrategy strategy = _portletImporter.getUserIdStrategy(user, userIdStrategy);

    ZipReader zipReader = ZipReaderFactoryUtil.getZipReader(file);

    PortletDataContext portletDataContext = new PortletDataContextImpl(companyId, groupId, parameterMap,
            new HashSet<String>(), strategy, zipReader);

    portletDataContext.setPortetDataContextListener(new PortletDataContextListenerImpl(portletDataContext));

    portletDataContext.setPrivateLayout(privateLayout);

    // Zip

    Element rootElement = null;
    InputStream themeZip = null;

    // Manifest

    String xml = portletDataContext.getZipEntryAsString("/manifest.xml");

    if (xml == null) {
        throw new LARFileException("manifest.xml not found in the LAR");
    }

    try {
        Document document = SAXReaderUtil.read(xml);

        rootElement = document.getRootElement();
    } catch (Exception e) {
        throw new LARFileException(e);
    }

    // Build compatibility

    Element headerElement = rootElement.element("header");

    int buildNumber = ReleaseInfo.getBuildNumber();

    int importBuildNumber = GetterUtil.getInteger(headerElement.attributeValue("build-number"));

    if (buildNumber != importBuildNumber) {
        throw new LayoutImportException("LAR build number " + importBuildNumber + " does not match "
                + "portal build number " + buildNumber);
    }

    // Type

    String larType = headerElement.attributeValue("type");

    if (!larType.equals("layout-prototype") && !larType.equals("layout-set")
            && !larType.equals("layout-set-prototype")) {

        throw new LARTypeException("Invalid type of LAR file (" + larType + ")");
    }

    // Available locales

    Locale[] sourceAvailableLocales = LocaleUtil
            .fromLanguageIds(StringUtil.split(headerElement.attributeValue("available-locales")));

    Locale[] targetAvailableLocales = LanguageUtil.getAvailableLocales();

    for (Locale sourceAvailableLocale : sourceAvailableLocales) {
        if (!ArrayUtil.contains(targetAvailableLocales, sourceAvailableLocale)) {

            LocaleException le = new LocaleException();

            le.setSourceAvailableLocales(sourceAvailableLocales);
            le.setTargetAvailableLocales(targetAvailableLocales);

            throw le;
        }
    }

    // Layout prototypes validity

    Element layoutsElement = rootElement.element("layouts");

    List<Element> layoutElements = layoutsElement.elements("layout");

    validateLayoutPrototypes(layoutsElement, layoutElements);

    // Group id

    long sourceGroupId = GetterUtil.getLong(headerElement.attributeValue("group-id"));

    portletDataContext.setSourceGroupId(sourceGroupId);

    // Layout and layout set prototype

    String layoutSetPrototypeUuid = layoutsElement.attributeValue("layout-set-prototype-uuid");

    if (group.isLayoutPrototype() && larType.equals("layout-prototype")) {
        LayoutPrototype layoutPrototype = LayoutPrototypeLocalServiceUtil
                .getLayoutPrototype(group.getClassPK());

        String layoutPrototypeUuid = GetterUtil.getString(headerElement.attributeValue("type-uuid"));

        LayoutPrototype existingLayoutPrototype = null;

        if (Validator.isNotNull(layoutPrototypeUuid)) {
            try {
                existingLayoutPrototype = LayoutPrototypeLocalServiceUtil
                        .getLayoutPrototypeByUuid(layoutPrototypeUuid);
            } catch (NoSuchLayoutPrototypeException nslpe) {
            }
        }

        if (existingLayoutPrototype == null) {
            layoutPrototype.setUuid(layoutPrototypeUuid);

            LayoutPrototypeLocalServiceUtil.updateLayoutPrototype(layoutPrototype);
        }
    } else if (group.isLayoutSetPrototype() && larType.equals("layout-set-prototype")) {

        LayoutSetPrototype layoutSetPrototype = LayoutSetPrototypeLocalServiceUtil
                .getLayoutSetPrototype(group.getClassPK());

        String importedLayoutSetPrototypeUuid = GetterUtil.getString(headerElement.attributeValue("type-uuid"));

        LayoutSetPrototype existingLayoutSetPrototype = null;

        if (Validator.isNotNull(importedLayoutSetPrototypeUuid)) {
            try {
                existingLayoutSetPrototype = LayoutSetPrototypeLocalServiceUtil
                        .getLayoutSetPrototypeByUuid(importedLayoutSetPrototypeUuid);
            } catch (NoSuchLayoutSetPrototypeException nslspe) {
            }
        }

        if (existingLayoutSetPrototype == null) {
            layoutSetPrototype.setUuid(importedLayoutSetPrototypeUuid);

            LayoutSetPrototypeLocalServiceUtil.updateLayoutSetPrototype(layoutSetPrototype);
        }
    } else if (larType.equals("layout-set-prototype")) {
        layoutSetPrototypeUuid = GetterUtil.getString(headerElement.attributeValue("type-uuid"));
    }

    ServiceContext serviceContext = ServiceContextThreadLocal.getServiceContext();

    if (Validator.isNotNull(layoutSetPrototypeUuid)) {
        layoutSet.setLayoutSetPrototypeUuid(layoutSetPrototypeUuid);
        layoutSet.setLayoutSetPrototypeLinkEnabled(layoutSetPrototypeLinkEnabled);

        LayoutSetLocalServiceUtil.updateLayoutSet(layoutSet);
    }

    // Look and feel

    if (importTheme) {
        themeZip = portletDataContext.getZipEntryAsInputStream("theme.zip");
    }

    // Look and feel

    String themeId = layoutSet.getThemeId();
    String colorSchemeId = layoutSet.getColorSchemeId();

    if (importThemeSettings) {
        Attribute themeIdAttribute = headerElement.attribute("theme-id");

        if (themeIdAttribute != null) {
            themeId = themeIdAttribute.getValue();
        }

        Attribute colorSchemeIdAttribute = headerElement.attribute("color-scheme-id");

        if (colorSchemeIdAttribute != null) {
            colorSchemeId = colorSchemeIdAttribute.getValue();
        }
    }

    if (importLogo) {
        String logoPath = headerElement.attributeValue("logo-path");

        byte[] iconBytes = portletDataContext.getZipEntryAsByteArray(logoPath);

        if ((iconBytes != null) && (iconBytes.length > 0)) {
            File logo = FileUtil.createTempFile(iconBytes);

            LayoutSetLocalServiceUtil.updateLogo(groupId, privateLayout, true, logo);
        } else {
            LayoutSetLocalServiceUtil.updateLogo(groupId, privateLayout, false, (File) null);
        }
    }

    if (importLayoutSetSettings) {
        String settings = GetterUtil.getString(headerElement.elementText("settings"));

        LayoutSetLocalServiceUtil.updateSettings(groupId, privateLayout, settings);
    }

    String css = GetterUtil.getString(headerElement.elementText("css"));

    if (themeZip != null) {
        String importThemeId = importTheme(layoutSet, themeZip);

        if (importThemeId != null) {
            themeId = importThemeId;
            colorSchemeId = ColorSchemeImpl.getDefaultRegularColorSchemeId();
        }

        if (_log.isDebugEnabled()) {
            _log.debug("Importing theme takes " + stopWatch.getTime() + " ms");
        }
    }

    boolean wapTheme = false;

    LayoutSetLocalServiceUtil.updateLookAndFeel(groupId, privateLayout, themeId, colorSchemeId, css, wapTheme);

    // Read asset categories, asset tags, comments, locks, permissions, and
    // ratings entries to make them available to the data handlers through
    // the context

    if (importPermissions) {
        _permissionImporter.readPortletDataPermissions(portletDataContext);
    }

    if (importCategories || group.isCompany()) {
        _portletImporter.readAssetCategories(portletDataContext);
        if (_log.isInfoEnabled()) {
            _log.info("Categories imported in " + stopWatch.getTime());
        }
    }

    _portletImporter.readAssetTags(portletDataContext);
    if (_log.isInfoEnabled()) {
        _log.info("Asset tags imported in " + stopWatch.getTime());
    }

    _portletImporter.readComments(portletDataContext);
    if (_log.isInfoEnabled()) {
        _log.info("Comments imported in " + stopWatch.getTime());
    }

    _portletImporter.readExpandoTables(portletDataContext);
    if (_log.isInfoEnabled()) {
        _log.info("Expando tables imported in " + stopWatch.getTime());
    }

    _portletImporter.readLocks(portletDataContext);
    if (_log.isInfoEnabled()) {
        _log.info("Locks imported in " + stopWatch.getTime());
    }

    _portletImporter.readRatingsEntries(portletDataContext);
    if (_log.isInfoEnabled()) {
        _log.info("Ratings imported in " + stopWatch.getTime());
    }

    // Layouts

    List<Layout> previousLayouts = LayoutUtil.findByG_P(groupId, privateLayout);

    //Modification start
    //We need modifiable list. So...
    List<Layout> prevTMP = new ArrayList();
    prevTMP.addAll(previousLayouts);
    previousLayouts = prevTMP;
    //Modification end

    // Remove layouts that were deleted from the layout set prototype

    if (Validator.isNotNull(layoutSetPrototypeUuid) && layoutSetPrototypeLinkEnabled) {

        LayoutSetPrototype layoutSetPrototype = LayoutSetPrototypeLocalServiceUtil
                .getLayoutSetPrototypeByUuid(layoutSetPrototypeUuid);

        Group layoutSetPrototypeGroup = layoutSetPrototype.getGroup();

        for (Layout layout : previousLayouts) {
            String sourcePrototypeLayoutUuid = layout.getSourcePrototypeLayoutUuid();

            if (Validator.isNull(layout.getSourcePrototypeLayoutUuid())) {
                continue;
            }

            Layout sourcePrototypeLayout = LayoutUtil.fetchByUUID_G(sourcePrototypeLayoutUuid,
                    layoutSetPrototypeGroup.getGroupId());

            if (sourcePrototypeLayout == null) {
                LayoutLocalServiceUtil.deleteLayout(layout, false, serviceContext);
            }
        }
    }

    StagingProgressUpdaterThreadLocal.getMonitor().getComponent(PublishProcessProgressMonitor.COMPONENT_LAYOUTS)
            .setItemsCount(layoutElements.size());

    List<Layout> newLayouts = new ArrayList<Layout>();

    Set<Long> newLayoutIds = new HashSet<Long>();

    Map<Long, Layout> newLayoutsMap = (Map<Long, Layout>) portletDataContext.getNewPrimaryKeysMap(Layout.class);

    if (_log.isDebugEnabled()) {
        if (layoutElements.size() > 0) {
            _log.debug("Importing layouts");
        }
    }

    for (Element layoutElement : layoutElements) {

        StagingProgressUpdaterThreadLocal.getMonitor()
                .getComponent(PublishProcessProgressMonitor.COMPONENT_LAYOUTS)
                .setItemsProcessed(processedItems++);

        importLayout(portletDataContext, user, layoutCache, previousLayouts, newLayouts, newLayoutsMap,
                newLayoutIds, portletsMergeMode, themeId, colorSchemeId, layoutsImportMode, privateLayout,
                importPermissions, importPublicLayoutPermissions, importUserPermissions, importThemeSettings,
                rootElement, layoutElement);
    }

    Element portletsElement = rootElement.element("portlets");

    List<Element> portletElements = portletsElement.elements("portlet");

    // Delete portlet data

    if (deletePortletData) {
        if (_log.isDebugEnabled()) {
            if (portletElements.size() > 0) {
                _log.debug("Deleting portlet data");
            }
        }

        for (Element portletElement : portletElements) {
            String portletId = portletElement.attributeValue("portlet-id");
            long layoutId = GetterUtil.getLong(portletElement.attributeValue("layout-id"));
            long plid = newLayoutsMap.get(layoutId).getPlid();

            portletDataContext.setPlid(plid);

            _portletImporter.deletePortletData(portletDataContext, portletId, plid);
        }
    }

    // Import portlets

    if (_log.isDebugEnabled()) {
        if (portletElements.size() > 0) {
            _log.debug("Importing portlets");
        }
    }

    StagingProgressUpdaterThreadLocal.getMonitor()
            .getComponent(PublishProcessProgressMonitor.COMPONENT_PORTLETS)
            .setItemsCount(portletElements.size());
    processedItems = 0;

    Layout defaultLayoutForNoPagesScope = null;
    String scope = MapUtil.getString(parameterMap, "scope");
    if ("no-pages".equals(scope) || "selected-pages".equals(scope)) {
        defaultLayoutForNoPagesScope = new LayoutImpl();
        defaultLayoutForNoPagesScope.setGroupId(groupId);
        defaultLayoutForNoPagesScope.setCompanyId(companyId);
        defaultLayoutForNoPagesScope.setPlid(LayoutConstants.DEFAULT_PLID);
    }

    for (Element portletElement : portletElements) {
        String portletPath = portletElement.attributeValue("path");
        String portletId = portletElement.attributeValue("portlet-id");
        long layoutId = GetterUtil.getLong(portletElement.attributeValue("layout-id"));
        long oldPlid = GetterUtil.getLong(portletElement.attributeValue("old-plid"));

        Portlet portlet = PortletLocalServiceUtil.getPortletById(portletDataContext.getCompanyId(), portletId);

        if (!portlet.isActive() || portlet.isUndeployedPortlet()) {
            continue;
        }

        StagingProgressUpdaterThreadLocal.getMonitor()
                .getComponent(PublishProcessProgressMonitor.COMPONENT_PORTLETS)
                .setItemsProcessed(processedItems++);
        Layout layout = newLayoutsMap.get(layoutId);

        long plid = LayoutConstants.DEFAULT_PLID;

        if (layout != null) {
            plid = layout.getPlid();
        }

        layout = LayoutUtil.fetchByPrimaryKey(plid);
        if (layout == null && defaultLayoutForNoPagesScope != null) {
            layout = defaultLayoutForNoPagesScope;
        }
        if ((layout == null) && !group.isCompany()) {
            continue;
        }

        portletDataContext.setPlid(plid);
        portletDataContext.setOldPlid(oldPlid);

        Document portletDocument = SAXReaderUtil.read(portletDataContext.getZipEntryAsString(portletPath));

        portletElement = portletDocument.getRootElement();

        // The order of the import is important. You must always import
        // the portlet preferences first, then the portlet data, then
        // the portlet permissions. The import of the portlet data
        // assumes that portlet preferences already exist.

        _portletImporter.setPortletScope(portletDataContext, portletElement);

        long portletPreferencesGroupId = groupId;

        Element portletDataElement = portletElement.element("portlet-data");

        boolean importData = importPortletData && (portletDataElement != null);

        try {
            if ((layout != null) && !group.isCompany()) {
                portletPreferencesGroupId = layout.getGroupId();
            }

            // Portlet preferences
            _log.info("Importing portlet " + portletId + " on layout " + layout.getFriendlyURL() + " in group "
                    + groupId);
            _portletImporter.importPortletPreferences(portletDataContext, layoutSet.getCompanyId(),
                    portletPreferencesGroupId, layout, null, portletElement, importPortletSetup,
                    importPortletArchivedSetups, importPortletUserPreferences, false, importData);

            // Portlet data

            if (importData) {
                try {
                    _portletImporter.importPortletData(portletDataContext, portletId, plid, portletDataElement);
                } catch (Throwable e) {
                    _log.error("Portlet data import error", e);
                    throw e;
                }
            }
        } finally {
            _portletImporter.resetPortletScope(portletDataContext, portletPreferencesGroupId);
        }

        // Portlet permissions

        if (importPermissions) {
            _permissionImporter.importPortletPermissions(layoutCache, companyId, groupId, userId, layout,
                    portletElement, portletId, importUserPermissions);
        }

        // Archived setups

        _portletImporter.importPortletPreferences(portletDataContext, layoutSet.getCompanyId(), groupId, null,
                null, portletElement, importPortletSetup, importPortletArchivedSetups,
                importPortletUserPreferences, false, importData);
    }

    if (importPermissions) {
        if ((userId > 0) && ((PropsValues.PERMISSIONS_USER_CHECK_ALGORITHM == 5)
                || (PropsValues.PERMISSIONS_USER_CHECK_ALGORITHM == 6))) {

            Indexer indexer = IndexerRegistryUtil.nullSafeGetIndexer(User.class);

            indexer.reindex(userId);
        }
    }

    // Asset links

    _portletImporter.readAssetLinks(portletDataContext);

    // Delete missing layouts

    if (deleteMissingLayouts) {
        deleteMissingLayouts(groupId, privateLayout, newLayoutIds, previousLayouts, serviceContext);
    }

    // Page count

    LayoutSetLocalServiceUtil.updatePageCount(groupId, privateLayout);

    if (_log.isInfoEnabled()) {
        _log.info("Importing layouts takes " + stopWatch.getTime() + " ms");
    }

    // Site

    GroupLocalServiceUtil.updateSite(groupId, true);

    // Web content layout type

    for (Layout layout : newLayouts) {
        UnicodeProperties typeSettingsProperties = layout.getTypeSettingsProperties();

        String articleId = typeSettingsProperties.getProperty("article-id");

        if (Validator.isNotNull(articleId)) {
            Map<String, String> articleIds = (Map<String, String>) portletDataContext
                    .getNewPrimaryKeysMap(JournalArticle.class + ".articleId");

            typeSettingsProperties.setProperty("article-id",
                    MapUtil.getString(articleIds, articleId, articleId));

            LayoutUtil.update(layout, false);
        }
    }

    zipReader.close();
}

From source file:com.liferay.portal.lar.PlaytechLayoutExporter.java

protected File doExportLayoutsAsFile(long groupId, boolean privateLayout, long[] layoutIds,
        Map<String, String[]> parameterMap, Date startDate, Date endDate) throws Exception {

    boolean exportCategories = MapUtil.getBoolean(parameterMap, PortletDataHandlerKeys.CATEGORIES);
    boolean exportIgnoreLastPublishDate = MapUtil.getBoolean(parameterMap,
            PortletDataHandlerKeys.IGNORE_LAST_PUBLISH_DATE);
    boolean exportPermissions = MapUtil.getBoolean(parameterMap, PortletDataHandlerKeys.PERMISSIONS);
    boolean exportUserPermissions = MapUtil.getBoolean(parameterMap, PortletDataHandlerKeys.USER_PERMISSIONS);
    boolean exportPortletArchivedSetups = MapUtil.getBoolean(parameterMap,
            PortletDataHandlerKeys.PORTLET_ARCHIVED_SETUPS);
    boolean exportPortletUserPreferences = MapUtil.getBoolean(parameterMap,
            PortletDataHandlerKeys.PORTLET_USER_PREFERENCES);
    boolean exportTheme = MapUtil.getBoolean(parameterMap, PortletDataHandlerKeys.THEME);
    boolean exportThemeSettings = MapUtil.getBoolean(parameterMap, PortletDataHandlerKeys.THEME_REFERENCE);
    boolean exportLogo = MapUtil.getBoolean(parameterMap, PortletDataHandlerKeys.LOGO);
    boolean exportLayoutSetSettings = MapUtil.getBoolean(parameterMap,
            PortletDataHandlerKeys.LAYOUT_SET_SETTINGS);
    //boolean publishToRemote = MapUtil.getBoolean(
    //   parameterMap, PortletDataHandlerKeys.PUBLISH_TO_REMOTE);
    boolean updateLastPublishDate = MapUtil.getBoolean(parameterMap,
            PortletDataHandlerKeys.UPDATE_LAST_PUBLISH_DATE);

    if (_log.isDebugEnabled()) {
        _log.debug("Export categories " + exportCategories);
        _log.debug("Export permissions " + exportPermissions);
        _log.debug("Export user permissions " + exportUserPermissions);
        _log.debug("Export portlet archived setups " + exportPortletArchivedSetups);
        _log.debug("Export portlet user preferences " + exportPortletUserPreferences);
        _log.debug("Export theme " + exportTheme);
    }/*from ww w .jav  a 2 s .c  om*/

    LayoutSet layoutSet = LayoutSetLocalServiceUtil.getLayoutSet(groupId, privateLayout);

    long companyId = layoutSet.getCompanyId();
    long defaultUserId = UserLocalServiceUtil.getDefaultUserId(companyId);

    ServiceContext serviceContext = ServiceContextThreadLocal.getServiceContext();

    if (serviceContext == null) {
        serviceContext = new ServiceContext();

        serviceContext.setCompanyId(companyId);
        serviceContext.setSignedIn(false);
        serviceContext.setUserId(defaultUserId);

        ServiceContextThreadLocal.pushServiceContext(serviceContext);
    }

    serviceContext.setAttribute("exporting", Boolean.TRUE);

    long layoutSetBranchId = MapUtil.getLong(parameterMap, "layoutSetBranchId");

    serviceContext.setAttribute("layoutSetBranchId", layoutSetBranchId);

    long lastPublishDate = System.currentTimeMillis();

    if (endDate != null) {
        lastPublishDate = endDate.getTime();
    }

    if (exportIgnoreLastPublishDate) {
        endDate = null;
        startDate = null;
    }

    StopWatch stopWatch = null;

    if (_log.isInfoEnabled()) {
        stopWatch = new StopWatch();

        stopWatch.start();
    }

    LayoutCache layoutCache = new LayoutCache();

    ZipWriter zipWriter = ZipWriterFactoryUtil.getZipWriter();

    PortletDataContext portletDataContext = new PortletDataContextImpl(companyId, groupId, parameterMap,
            new HashSet<String>(), startDate, endDate, zipWriter);

    portletDataContext.setPortetDataContextListener(new PortletDataContextListenerImpl(portletDataContext));

    Document document = SAXReaderUtil.createDocument();

    Element rootElement = document.addElement("root");

    Element headerElement = rootElement.addElement("header");

    headerElement.addAttribute("available-locales", StringUtil.merge(LanguageUtil.getAvailableLocales()));
    headerElement.addAttribute("build-number", String.valueOf(ReleaseInfo.getBuildNumber()));
    headerElement.addAttribute("export-date", Time.getRFC822());

    if (portletDataContext.hasDateRange()) {
        headerElement.addAttribute("start-date", String.valueOf(portletDataContext.getStartDate()));
        headerElement.addAttribute("end-date", String.valueOf(portletDataContext.getEndDate()));
    }

    headerElement.addAttribute("group-id", String.valueOf(groupId));
    headerElement.addAttribute("private-layout", String.valueOf(privateLayout));

    Group group = layoutSet.getGroup();

    String type = "layout-set";

    if (group.isLayoutPrototype()) {
        type = "layout-prototype";

        LayoutPrototype layoutPrototype = LayoutPrototypeLocalServiceUtil
                .getLayoutPrototype(group.getClassPK());

        headerElement.addAttribute("type-uuid", layoutPrototype.getUuid());
    } else if (group.isLayoutSetPrototype()) {
        type = "layout-set-prototype";

        LayoutSetPrototype layoutSetPrototype = LayoutSetPrototypeLocalServiceUtil
                .getLayoutSetPrototype(group.getClassPK());

        headerElement.addAttribute("type-uuid", layoutSetPrototype.getUuid());
    }

    headerElement.addAttribute("type", type);

    if (exportTheme || exportThemeSettings) {
        headerElement.addAttribute("theme-id", layoutSet.getThemeId());
        headerElement.addAttribute("color-scheme-id", layoutSet.getColorSchemeId());
    }

    if (exportLogo) {
        Image image = ImageLocalServiceUtil.getImage(layoutSet.getLogoId());

        if ((image != null) && (image.getTextObj() != null)) {
            String logoPath = getLayoutSetLogoPath(portletDataContext);

            headerElement.addAttribute("logo-path", logoPath);

            portletDataContext.addZipEntry(logoPath, image.getTextObj());
        }
    }

    if (exportLayoutSetSettings) {
        Element settingsElement = headerElement.addElement("settings");

        settingsElement.addCDATA(layoutSet.getSettings());
    }

    Element cssElement = headerElement.addElement("css");

    cssElement.addCDATA(layoutSet.getCss());

    Portlet layoutConfigurationPortlet = PortletLocalServiceUtil
            .getPortletById(portletDataContext.getCompanyId(), PortletKeys.LAYOUT_CONFIGURATION);

    Map<String, Object[]> portletIds = new LinkedHashMap<>();

    List<Layout> layouts = null;

    if ((layoutIds == null) || (layoutIds.length == 0)) {
        String scope = MapUtil.getString(parameterMap, "scope");
        if ("no-pages".equals(scope) || "selected-pages".equals(scope)) {
            layouts = Arrays.asList();
        } else {
            layouts = LayoutLocalServiceUtil.getLayouts(groupId, privateLayout);
        }
    } else {
        layouts = LayoutLocalServiceUtil.getLayouts(groupId, privateLayout, layoutIds);
    }

    List<Portlet> portlets = getAlwaysExportablePortlets(companyId);

    long plid = LayoutConstants.DEFAULT_PLID;

    if (!layouts.isEmpty()) {
        Layout firstLayout = layouts.get(0);

        plid = firstLayout.getPlid();
    }

    if (group.isStagingGroup()) {
        group = group.getLiveGroup();
    }

    for (Portlet portlet : portlets) {
        String portletId = portlet.getRootPortletId();
        _log.debug("Exporting portlet " + portletId);

        if (!group.isStagedPortlet(portletId)) {
            continue;
        }

        String key = PortletPermissionUtil.getPrimaryKey(0, portletId);

        if (portletIds.get(key) == null) {
            portletIds.put(key, new Object[] { portletId, plid, groupId, StringPool.BLANK, StringPool.BLANK });
        }
    }

    Element layoutsElement = rootElement.addElement("layouts");

    long processedItems = 0;

    StagingProgressUpdaterThreadLocal.getMonitor().getComponent(PublishProcessProgressMonitor.COMPONENT_LAYOUTS)
            .setItemsCount(layouts.size());

    String layoutSetPrototypeUuid = layoutSet.getLayoutSetPrototypeUuid();

    if (Validator.isNotNull(layoutSetPrototypeUuid)) {
        LayoutSetPrototype layoutSetPrototype = LayoutSetPrototypeLocalServiceUtil
                .getLayoutSetPrototypeByUuid(layoutSetPrototypeUuid);

        layoutsElement.addAttribute("layout-set-prototype-uuid", layoutSetPrototypeUuid);

        layoutsElement.addAttribute("layout-set-prototype-name",
                layoutSetPrototype.getName(LocaleUtil.getDefault()));
    }

    for (Layout layout : layouts) {
        StagingProgressUpdaterThreadLocal.getMonitor()
                .getComponent(PublishProcessProgressMonitor.COMPONENT_LAYOUTS)
                .setItemsProcessed(processedItems++);

        exportLayout(portletDataContext, layoutConfigurationPortlet, layoutCache, portlets, portletIds,
                exportPermissions, exportUserPermissions, layout, layoutsElement);
    }

    if (PropsValues.PERMISSIONS_USER_CHECK_ALGORITHM < 5) {
        Element rolesElement = rootElement.addElement("roles");

        if (exportPermissions) {
            _permissionExporter.exportLayoutRoles(layoutCache, companyId, groupId, rolesElement);
        }
    }

    long previousScopeGroupId = portletDataContext.getScopeGroupId();

    Element portletsElement = rootElement.addElement("portlets");

    StagingProgressUpdaterThreadLocal.getMonitor()
            .getComponent(PublishProcessProgressMonitor.COMPONENT_PORTLETS).setItemsCount(portletIds.size());

    processedItems = 0;
    for (Map.Entry<String, Object[]> portletIdsEntry : portletIds.entrySet()) {
        StagingProgressUpdaterThreadLocal.getMonitor()
                .getComponent(PublishProcessProgressMonitor.COMPONENT_PORTLETS)
                .setItemsProcessed(processedItems++);

        Object[] portletObjects = portletIdsEntry.getValue();

        String portletId = null;
        plid = LayoutConstants.DEFAULT_PLID;
        long scopeGroupId = 0;
        String scopeType = StringPool.BLANK;
        String scopeLayoutUuid = null;

        if (portletObjects.length == 4) {
            portletId = (String) portletIdsEntry.getValue()[0];
            plid = (Long) portletIdsEntry.getValue()[1];
            scopeGroupId = (Long) portletIdsEntry.getValue()[2];
            scopeLayoutUuid = (String) portletIdsEntry.getValue()[3];
        } else {
            portletId = (String) portletIdsEntry.getValue()[0];
            plid = (Long) portletIdsEntry.getValue()[1];
            scopeGroupId = (Long) portletIdsEntry.getValue()[2];
            scopeType = (String) portletIdsEntry.getValue()[3];
            scopeLayoutUuid = (String) portletIdsEntry.getValue()[4];
        }

        Layout layout = LayoutLocalServiceUtil.fetchLayout(plid);

        if (layout == null) {
            if (!group.isCompany() && (plid < LayoutConstants.DEFAULT_PLID)) {

                continue;
            }

            if (_log.isWarnEnabled()) {
                _log.warn("Assuming global scope because no layout was found");
            }

            layout = new LayoutImpl();

            layout.setGroupId(groupId);
            layout.setCompanyId(companyId);
        }

        portletDataContext.setPlid(plid);
        portletDataContext.setOldPlid(plid);
        portletDataContext.setScopeGroupId(scopeGroupId);
        portletDataContext.setScopeType(scopeType);
        portletDataContext.setScopeLayoutUuid(scopeLayoutUuid);

        boolean[] exportPortletControls = getExportPortletControls(companyId, portletId, portletDataContext,
                parameterMap);

        _portletExporter.exportPortlet(portletDataContext, layoutCache, portletId, layout, portletsElement,
                defaultUserId, exportPermissions, exportPortletArchivedSetups, exportPortletControls[0],
                exportPortletControls[1], exportPortletUserPreferences, exportUserPermissions);
    }

    portletDataContext.setScopeGroupId(previousScopeGroupId);

    if (exportCategories || group.isCompany()) {
        exportAssetCategories(portletDataContext);
    }

    _portletExporter.exportAssetLinks(portletDataContext);
    _portletExporter.exportAssetTags(portletDataContext);
    _portletExporter.exportComments(portletDataContext);
    _portletExporter.exportExpandoTables(portletDataContext);
    _portletExporter.exportLocks(portletDataContext);

    if (exportPermissions) {
        _permissionExporter.exportPortletDataPermissions(portletDataContext);
    }

    _portletExporter.exportRatingsEntries(portletDataContext, rootElement);

    if (exportTheme && !portletDataContext.isPerformDirectBinaryImport()) {
        exportTheme(layoutSet, zipWriter);
    }

    if (_log.isInfoEnabled()) {
        if (stopWatch != null) {
            _log.info("Exporting layouts takes " + stopWatch.getTime() + " ms");
        } else {
            _log.info("Exporting layouts is finished");
        }
    }

    portletDataContext.addZipEntry("/manifest.xml", document.formattedString());

    try {
        return zipWriter.getFile();
    } finally {
        if (updateLastPublishDate) {
            updateLastPublishDate(layoutSet, lastPublishDate);
        }
    }
}