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.DBFactoryUtil;
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 =
065 new ArrayList<VerifyUUIDRunnable>(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 VerifiableUUIDModel verifiableUUIDModel, long primKey)
079 throws Exception {
080
081 DB db = DBFactoryUtil.getDB();
082
083 StringBundler sb = new StringBundler(8);
084
085 sb.append("update ");
086 sb.append(verifiableUUIDModel.getTableName());
087 sb.append(" set uuid_ = '");
088 sb.append(PortalUUIDUtil.generate());
089 sb.append("' where ");
090 sb.append(verifiableUUIDModel.getPrimaryKeyColumnName());
091 sb.append(" = ");
092 sb.append(primKey);
093
094 db.runSQL(sb.toString());
095 }
096
097 protected void verifyUUID(VerifiableUUIDModel verifiableUUIDModel)
098 throws Exception {
099
100 Connection con = null;
101 PreparedStatement ps = null;
102 ResultSet rs = null;
103
104 try {
105 con = DataAccess.getUpgradeOptimizedConnection();
106
107 ps = con.prepareStatement(
108 "select " + verifiableUUIDModel.getPrimaryKeyColumnName() +
109 " from " + verifiableUUIDModel.getTableName() +
110 " where uuid_ is null or uuid_ = ''");
111
112 rs = ps.executeQuery();
113
114 while (rs.next()) {
115 long pk = rs.getLong(
116 verifiableUUIDModel.getPrimaryKeyColumnName());
117
118 updateUUID(verifiableUUIDModel, pk);
119 }
120 }
121 finally {
122 DataAccess.cleanUp(con, ps, rs);
123 }
124 }
125
126 private class VerifyUUIDRunnable extends ThrowableAwareRunnable {
127
128 public VerifyUUIDRunnable(VerifiableUUIDModel verifiableUUIDModel) {
129 _verifiableUUIDModel = verifiableUUIDModel;
130 }
131
132 @Override
133 protected void doRun() throws Exception {
134 verifyUUID(_verifiableUUIDModel);
135 }
136
137 private final VerifiableUUIDModel _verifiableUUIDModel;
138
139 }
140
141 }