private <CC extends BaseKit> boolean subParse( LoadContext context, Kit kit, CDOMSubLineLoader<CC> loader, String line) throws PersistenceLayerException { CC obj = loader.getCDOMObject(); context.getObjectContext().addToList(kit, ListKey.KIT_TASKS, obj); return loader.parseLine(context, obj, line); }
@Override public void unloadLstFiles(LoadContext lc, Collection<CampaignSourceEntry> files) { HashMapToList<Class<?>, CDOMSubLineLoader<?>> loaderMap = new HashMapToList<Class<?>, CDOMSubLineLoader<?>>(); for (CDOMSubLineLoader<?> loader : loadMap.values()) { loaderMap.addToListFor(loader.getLoadedClass(), loader); } for (CampaignSourceEntry cse : files) { lc.setExtractURI(cse.getURI()); URI writeURI = cse.getWriteURI(); File f = new File(writeURI); ensureCreated(f.getParentFile()); try { TreeSet<String> set = new TreeSet<String>(); for (Kit k : lc.getReferenceContext().getConstructedCDOMObjects(Kit.class)) { if (cse.getURI().equals(k.getSourceURI())) { StringBuilder sb = new StringBuilder(); String[] unparse = lc.unparseSubtoken(k, "*KITTOKEN"); sb.append("STARTPACK:"); sb.append(k.getDisplayName()); if (unparse != null) { sb.append('\t').append(StringUtil.join(unparse, "\t")); } sb.append('\n'); Changes<BaseKit> changes = lc.getObjectContext().getListChanges(k, ListKey.KIT_TASKS); Collection<BaseKit> tasks = changes.getAdded(); if (tasks == null) { continue; } for (BaseKit kt : tasks) { List<CDOMSubLineLoader<?>> loaders = loaderMap.getListFor(kt.getClass()); for (CDOMSubLineLoader loader : loaders) { processTask(lc, kt, loader, sb); } } sb.append('\n'); set.add(sb.toString()); } } PrintWriter pw = new PrintWriter(f); pw.println("#~PARAGRAPH"); for (String s : set) { pw.print(s); } pw.close(); } catch (IOException e) { Logging.errorPrint("Exception in Load: ", e); } } }
public void addLineLoader(CDOMSubLineLoader<? extends BaseKit> loader) { // TODO check null // TODO check duplicate! loadMap.put(loader.getPrefix(), loader); }
private <T extends BaseKit> void processTask( LoadContext lc, T kt, CDOMSubLineLoader<T> loader, StringBuilder pw) { loader.unloadObject(lc, kt, pw); }