/* * This program is part of the OpenLMIS logistics management information * system platform software. * * Copyright © 2015 ThoughtWorks, Inc. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published * by the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. This program is distributed in the * hope that it will be useful, but WITHOUT ANY WARRANTY; without even the * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU Affero General Public License for more details. You should * have received a copy of the GNU Affero General Public License along with * this program. If not, see http://www.gnu.org/licenses. For additional * information contact info@OpenLMIS.org */ package org.openlmis.core.persistence.migrations; import com.j256.ormlite.dao.Dao; import org.openlmis.core.LMISApp; import org.openlmis.core.exceptions.LMISException; import org.openlmis.core.manager.MovementReasonManager; import org.openlmis.core.model.StockMovementItem; import org.openlmis.core.persistence.DbUtil; import org.openlmis.core.persistence.GenericDao; import org.openlmis.core.persistence.Migration; import java.sql.SQLException; import java.util.List; public class AddCreatedTimeToStockMovement extends Migration { GenericDao<StockMovementItem> stockItemGenericDao; MovementReasonManager reasonManager; DbUtil dbUtil; public AddCreatedTimeToStockMovement() { stockItemGenericDao = new GenericDao<>(StockMovementItem.class, LMISApp.getContext()); reasonManager = MovementReasonManager.getInstance(); dbUtil = new DbUtil(); } @Override public void up() { execSQL("ALTER TABLE 'stock_items' ADD COLUMN createdTime VARCHAR"); execSQL("CREATE INDEX `stock_items_created_time_idx` ON `stock_items` ( `createdTime` )"); try { initCreatedTime(); }catch (LMISException e){ e.reportToFabric(); } } private void initCreatedTime() throws LMISException { List<StockMovementItem> itemList = stockItemGenericDao.queryForAll(); if (itemList == null || itemList.size() == 0) { return; } for (StockMovementItem item : itemList) { item.setCreatedTime(item.getCreatedAt()); } updateStockMovementItems(itemList); } private void updateStockMovementItems(final List<StockMovementItem> stockMovementItems) throws LMISException { dbUtil.withDaoAsBatch(LMISApp.getContext(), StockMovementItem.class, new DbUtil.Operation<StockMovementItem, Void>() { @Override public Void operate(Dao<StockMovementItem, String> dao) throws SQLException { for (StockMovementItem stockMovementItem : stockMovementItems) { dao.update(stockMovementItem); } return null; } }); } }