001    /**
002     * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
003     *
004     * This library is free software; you can redistribute it and/or modify it under
005     * the terms of the GNU Lesser General Public License as published by the Free
006     * Software Foundation; either version 2.1 of the License, or (at your option)
007     * any later version.
008     *
009     * This library is distributed in the hope that it will be useful, but WITHOUT
010     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
011     * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
012     * details.
013     */
014    
015    package com.liferay.portal.upgrade.v6_1_0;
016    
017    import com.liferay.portal.kernel.security.auth.FullNameGenerator;
018    import com.liferay.portal.kernel.security.auth.FullNameGeneratorFactory;
019    import com.liferay.portal.kernel.upgrade.UpgradeProcess;
020    import com.liferay.portal.kernel.util.LoggingTimer;
021    import com.liferay.portal.kernel.util.StringBundler;
022    import com.liferay.portal.kernel.util.StringPool;
023    
024    import java.sql.PreparedStatement;
025    import java.sql.ResultSet;
026    
027    /**
028     * @author Hugo Huijser
029     */
030    public class UpgradeUserName extends UpgradeProcess {
031    
032            @Override
033            protected void doUpgrade() throws Exception {
034                    updateTable("BookmarksEntry", false);
035                    updateTable("BookmarksFolder", false);
036                    updateTable("IGFolder", false);
037                    updateTable("IGImage", false);
038                    updateTable("PollsVote", true);
039            }
040    
041            protected void updateTable(String tableName, boolean setCompanyId)
042                    throws Exception {
043    
044                    try (LoggingTimer loggingTimer = new LoggingTimer(tableName)) {
045                            StringBundler sb = new StringBundler(11);
046    
047                            sb.append("select distinct User_.companyId, User_.userId, ");
048                            sb.append("User_.firstName, User_.middleName, User_.lastName ");
049                            sb.append("from User_ inner join ");
050                            sb.append(tableName);
051                            sb.append(" on ");
052                            sb.append(tableName);
053                            sb.append(".userId = User_.userId where ");
054                            sb.append(tableName);
055                            sb.append(".userName is null or ");
056                            sb.append(tableName);
057                            sb.append(".userName = ''");
058    
059                            try (PreparedStatement ps = connection.prepareStatement(
060                                            sb.toString());
061                                    ResultSet rs = ps.executeQuery()) {
062    
063                                    while (rs.next()) {
064                                            long companyId = rs.getLong("companyId");
065                                            long userId = rs.getLong("userId");
066                                            String firstName = rs.getString("firstName");
067                                            String middleName = rs.getString("middleName");
068                                            String lastName = rs.getString("lastName");
069    
070                                            FullNameGenerator fullNameGenerator =
071                                                    FullNameGeneratorFactory.getInstance();
072    
073                                            String fullName = fullNameGenerator.getFullName(
074                                                    firstName, middleName, lastName);
075    
076                                            fullName = fullName.replace(
077                                                    StringPool.APOSTROPHE, StringPool.DOUBLE_APOSTROPHE);
078    
079                                            if (setCompanyId) {
080                                                    sb = new StringBundler(8);
081    
082                                                    sb.append("update ");
083                                                    sb.append(tableName);
084                                                    sb.append(" set companyId = ");
085                                                    sb.append(companyId);
086                                                    sb.append(", userName = '");
087                                                    sb.append(fullName);
088                                                    sb.append("' where userId = ");
089                                                    sb.append(userId);
090                                            }
091                                            else {
092                                                    sb = new StringBundler(6);
093    
094                                                    sb.append("update ");
095                                                    sb.append(tableName);
096                                                    sb.append(" set userName = '");
097                                                    sb.append(fullName);
098                                                    sb.append("' where userId = ");
099                                                    sb.append(userId);
100                                            }
101    
102                                            runSQL(sb.toString());
103                                    }
104                            }
105                    }
106            }
107    
108    }