package org.onehippo.forge.konakart.cms.replication.synchronization.job;
import org.hippoecm.repository.quartz.JCRSchedulingContext;
import org.onehippo.forge.konakart.cms.replication.jcr.GalleryProcesssorConfig;
import org.onehippo.forge.konakart.cms.replication.synchronization.KonakartResourceScheduler;
import org.onehippo.forge.konakart.common.engine.KKAdminEngine;
import org.onehippo.forge.konakart.common.engine.KKEngine;
import org.onehippo.forge.konakart.common.engine.KKStoreConfig;
import org.onehippo.forge.konakart.common.jcr.HippoModuleConfig;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.jcr.Session;
import java.util.Collection;
public class KonakartSyncJob implements Job {
private static Logger log = LoggerFactory.getLogger(KonakartSyncJob.class);
private Session jcrSession;
/**
* Start the replication
*/
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
log.debug("Executing Konakart Products Replicator ...");
// Set the JcrSession
KonakartResourceScheduler scheduler = (KonakartResourceScheduler) context.getScheduler();
jcrSession = ((JCRSchedulingContext) scheduler.getCtx()).getSession();
// Load the gallery processor service
GalleryProcesssorConfig.load(jcrSession);
try {
// Initialize the Konakart engine
KKEngine.init(jcrSession);
KKAdminEngine.init(jcrSession);
// Synchronize all stores
Collection<KKStoreConfig> kkStoreConfigs = HippoModuleConfig.getConfig().getStoresConfig().values();
for (KKStoreConfig kkStoreConfig : kkStoreConfigs) {
if ((kkStoreConfig == null) || !kkStoreConfig.isInitialized()) {
log.error("The Konakart synchronization service has not be initialized. Please check the log.");
continue;
}
try {
// Synchronize konakart information
syncKonakartToHippo(kkStoreConfig);
} catch (Exception e) {
log.warn("Failed to update Repository to Konakart. ", e);
}
// Synchronize hippo product
try {
syncHippoToKonakart(kkStoreConfig);
} catch (Exception e) {
log.warn("Failed to update Konakart to Repository. ", e);
}
}
} catch (Exception e) {
log.warn("Failed to initialize Konakart engine. ", e);
}
}
/**
* Synchronize Konakart information to Hippo
*
* @param kkStoreConfig the store config
* @throws Exception an exception
*/
protected void syncKonakartToHippo(KKStoreConfig kkStoreConfig) throws Exception {
// Synchronize products
if (KonakartSyncProducts.updateKonakartToHippo(kkStoreConfig, jcrSession)) {
kkStoreConfig.updateLastUpdatedTimeKonakartToRepository(jcrSession);
}
}
/**
* Synchronize Konakart information to Hippo
*
* @param kkStoreConfig the store config
* @throws Exception an exception
*/
protected void syncHippoToKonakart(KKStoreConfig kkStoreConfig) throws Exception {
// Synchronize products
KonakartSyncProducts.updateHippoToKonakart(kkStoreConfig, jcrSession);
kkStoreConfig.updateLastUpdatedTimeRepositoryToKonakart(jcrSession);
}
}