package to.rtc.rtc2jira;
import java.io.IOException;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.logging.FileHandler;
import java.util.logging.Logger;
import java.util.logging.SimpleFormatter;
import java.util.logging.StreamHandler;
import to.rtc.rtc2jira.exporter.Exporter;
import to.rtc.rtc2jira.storage.FieldNames;
import to.rtc.rtc2jira.storage.StorageEngine;
import to.rtc.rtc2jira.storage.StorageQuery;
import com.orientechnologies.orient.core.record.impl.ODocument;
public class ExportManager {
private static Logger LOGGER = Logger.getLogger(ExportManager.class.getName());
public static final StreamHandler DEFAULT_LOG_HANDLER;
static {
FileHandler fh = null;
try {
LocalDateTime date = LocalDateTime.now();
String timestamp =
date.getYear() + "_" + date.getMonthValue() + "_" + date.getDayOfMonth() + "__" + date.getHour() + "_"
+ date.getMinute();
fh = new FileHandler("C:/workspace/gitRepRtcToJira/rtc2jira/DefaultExportLog_" + timestamp + ".log");
SimpleFormatter formatter = new SimpleFormatter();
fh.setFormatter(formatter);
} catch (SecurityException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
DEFAULT_LOG_HANDLER = fh;
LOGGER.addHandler(DEFAULT_LOG_HANDLER);
}
private List<Exporter> exporters;
public ExportManager() {
exporters = new ArrayList<Exporter>();
}
public void export(Settings settings, StorageEngine storageEngine) throws Exception {
for (Exporter exporter : getExporters()) {
if (exporter.isConfigured()) {
exporter.initialize(settings, storageEngine);
Collection<Integer> rtcWorkItemRange = Settings.getInstance().getRtcWorkItemRange();
if (rtcWorkItemRange != null) {
rtcWorkItemRange = new HashSet<Integer>(rtcWorkItemRange);
}
for (ODocument workItem : StorageQuery.getRTCWorkItems(storageEngine)) {
String workItemId = workItem.field(FieldNames.ID);
workItem = StorageQuery.getRTCWorkItem(storageEngine, Integer.parseInt(workItemId));
Integer idSeq = Integer.valueOf(workItemId);
if (rtcWorkItemRange == null || rtcWorkItemRange.contains(idSeq)) {
exporter.createOrUpdateItem(workItem);
LOGGER.info("Exported workitem " + workItem.field(FieldNames.ID));
}
}
exporter.postExport();
}
}
}
public void addExporters(Exporter... exporters) {
this.exporters.addAll(Arrays.asList(exporters));
}
List<Exporter> getExporters() {
if (exporters == null) {
exporters = new ArrayList<>();
}
return exporters;
}
}