@Override public Pipeline getDebugPipeline() { return getPipeline(Stage.Mode.DEBUG); }
public MongoPipelineWriter(MongoPipelineReader reader, WriteConcern concern) { this.reader = reader; this.concern = concern; pipelinefs = reader.getPipelineFS(); stages = reader.getStagesCollection(); }
private Pipeline getPipeline(Stage.Mode mode) { Pipeline p = new Pipeline(); DBCursor cursor = stages.find(new BasicDBObject(ACTIVE_KEY, mode.toString())); while(cursor.hasNext()) { DBObject obj = cursor.next(); if(!obj.containsField(TYPE_KEY) || STAGE_TYPE.equals(obj.get(TYPE_KEY))) { Stage s = getStage(obj); if(!p.hasGroup(getGroupName(obj))) { p.addGroup(new StageGroup(getGroupName(obj))); } p.getGroup(getGroupName(obj)).addStage(s); } else { addGroup(p, getGroup(obj)); } } return p; }
@Override public DatabaseFile getFile(String fileName) { DBObject dbo = pipelinefs.findOne(new BasicDBObject(MongoPipelineReader.FILENAME_KEY, fileName)); return getFile(dbo); }
public void inactivate(Stage stage) { DBObject q = reader.getStageQuery(stage.getName()); stages.findAndModify(q, new BasicDBObject("$set", new BasicDBObject(MongoPipelineReader.ACTIVE_KEY, Stage.Mode.INACTIVE.toString()))); }
private void writeProperties(StageGroup stageGroup) { DBObject q = reader.getGroupQuery(stageGroup.getName()); WriteResult result = stages.update(q, getGroupDBObject(stageGroup), true, false, concern); if (logger.isDebugEnabled()) { logger.debug("Wrote properties for group '{}', operation updated '{}' objects, got message '{}'", stageGroup.getName(), result.getN(), result); } }
pipelineReader = new MongoPipelineReader(db); pipelineWriter = new MongoPipelineWriter(pipelineReader, concern);
private DatabaseFile getFile(Object id) { return getFile(pipelinefs.findOne(new BasicDBObject(MongoDocument.MONGO_ID_KEY, id))); }
public void write(Stage stage, String group) throws IOException { DBObject q = reader.getStageQuery(stage.getName()); WriteResult result = stages.update(q, getStageDBObject(stage, group), true, false, concern); if (logger.isDebugEnabled()) { logger.debug("Wrote stage '{}' in group '{}', operation updated '{}' objects, got message '{}'", stage.getName(), group, result.getN(), result); } }
@Override public List<DatabaseFile> getFiles() { ArrayList<DatabaseFile> list = new ArrayList<DatabaseFile>(); DBCursor cursor = pipelinefs.getFileList(); while(cursor.hasNext()) { DBObject dbo = cursor.next(); list.add(getFile(dbo)); } return list; }
@Override public Pipeline getPipeline() { return getPipeline(Stage.Mode.ACTIVE); }
@SuppressWarnings("unchecked") private Stage getStage(DBObject dbo) { Stage stage = new Stage((String)dbo.get(STAGE_KEY), getFile(dbo.get(FILE_KEY))); DBObject props = (DBObject) dbo.get(PROPERTIES_KEY); stage.setMode(Mode.valueOf((String)dbo.get(ACTIVE_KEY))); stage.setPropertiesModifiedDate((Date)props.get(PROPERTIES_DATE_SUBKEY)); DBObject properties = (DBObject) props.get(PROPERTIES_MAP_SUBKEY); HashMap<String, Object> map = new HashMap<String, Object>(); if(properties!=null) { map.putAll(properties.toMap()); } stage.setProperties(map); return stage; }
@Override public void write(Pipeline p) throws IOException { Pipeline old = reader.getPipeline(); for(Stage s : old.getStages()) { inactivate(s); } for(StageGroup g : p.getStageGroups()) { write(g); } }