001
014
015 package com.liferay.portal.verify;
016
017 import com.liferay.portal.kernel.bean.PortalBeanLocatorUtil;
018 import com.liferay.portal.kernel.concurrent.ThrowableAwareRunnable;
019 import com.liferay.portal.kernel.dao.db.DB;
020 import com.liferay.portal.kernel.dao.db.DBManagerUtil;
021 import com.liferay.portal.kernel.dao.jdbc.DataAccess;
022 import com.liferay.portal.kernel.util.StringBundler;
023 import com.liferay.portal.kernel.uuid.PortalUUIDUtil;
024 import com.liferay.portal.verify.model.VerifiableUUIDModel;
025
026 import java.sql.Connection;
027 import java.sql.PreparedStatement;
028 import java.sql.ResultSet;
029
030 import java.util.ArrayList;
031 import java.util.Collection;
032 import java.util.List;
033 import java.util.Map;
034
035
038 public class VerifyUUID extends VerifyProcess {
039
040 public static void verify(VerifiableUUIDModel ... verifiableUUIDModels)
041 throws Exception {
042
043 VerifyUUID verifyUUID = new VerifyUUID();
044
045 verifyUUID.doVerify(verifiableUUIDModels);
046 }
047
048 @Override
049 protected void doVerify() throws Exception {
050 Map<String, VerifiableUUIDModel> verifiableUUIDModelsMap =
051 PortalBeanLocatorUtil.locate(VerifiableUUIDModel.class);
052
053 Collection<VerifiableUUIDModel> verifiableUUIDModels =
054 verifiableUUIDModelsMap.values();
055
056 doVerify(
057 verifiableUUIDModels.toArray(
058 new VerifiableUUIDModel[verifiableUUIDModels.size()]));
059 }
060
061 protected void doVerify(VerifiableUUIDModel... verifiableUUIDModels)
062 throws Exception {
063
064 List<VerifyUUIDRunnable> verifyUUIDRunnables = new ArrayList<>(
065 verifiableUUIDModels.length);
066
067 for (VerifiableUUIDModel verifiableUUIDModel : verifiableUUIDModels) {
068 VerifyUUIDRunnable verifyUUIDRunnable = new VerifyUUIDRunnable(
069 verifiableUUIDModel);
070
071 verifyUUIDRunnables.add(verifyUUIDRunnable);
072 }
073
074 doVerify(verifyUUIDRunnables);
075 }
076
077 protected void updateUUID(
078 Connection con, VerifiableUUIDModel verifiableUUIDModel,
079 long primKey)
080 throws Exception {
081
082 DB db = DBManagerUtil.getDB();
083
084 StringBundler sb = new StringBundler(8);
085
086 sb.append("update ");
087 sb.append(verifiableUUIDModel.getTableName());
088 sb.append(" set uuid_ = '");
089 sb.append(PortalUUIDUtil.generate());
090 sb.append("' where ");
091 sb.append(verifiableUUIDModel.getPrimaryKeyColumnName());
092 sb.append(" = ");
093 sb.append(primKey);
094
095 db.runSQL(con, sb.toString());
096 }
097
098 protected void verifyUUID(VerifiableUUIDModel verifiableUUIDModel)
099 throws Exception {
100
101 PreparedStatement ps = null;
102 ResultSet rs = null;
103
104 try (Connection con = DataAccess.getUpgradeOptimizedConnection()) {
105 ps = con.prepareStatement(
106 "select " + verifiableUUIDModel.getPrimaryKeyColumnName() +
107 " from " + verifiableUUIDModel.getTableName() +
108 " where uuid_ is null or uuid_ = ''");
109
110 rs = ps.executeQuery();
111
112 while (rs.next()) {
113 long pk = rs.getLong(
114 verifiableUUIDModel.getPrimaryKeyColumnName());
115
116 updateUUID(con, verifiableUUIDModel, pk);
117 }
118 }
119 finally {
120 DataAccess.cleanUp(ps, rs);
121 }
122 }
123
124 private class VerifyUUIDRunnable extends ThrowableAwareRunnable {
125
126 public VerifyUUIDRunnable(VerifiableUUIDModel verifiableUUIDModel) {
127 _verifiableUUIDModel = verifiableUUIDModel;
128 }
129
130 @Override
131 protected void doRun() throws Exception {
132 verifyUUID(_verifiableUUIDModel);
133 }
134
135 private final VerifiableUUIDModel _verifiableUUIDModel;
136
137 }
138
139 }