Calendar dataToCal(ObjectData dataDate, ObjectData dataTime) { Calendar cal = Calendar.getInstance(); int year1 = byteToInt(dataDate.get(0)); int year2 = byteToInt(dataDate.get(1)); int year = (year1 << 8) | year2; int month = byteToInt(dataDate.get(2)) - 1; int day = byteToInt(dataDate.get(3)); int hour = byteToInt(dataTime.get(0)); int min = byteToInt(dataTime.get(1)); cal.set(year, month, day, hour, min, 0); cal.set(Calendar.MILLISECOND, 0); return cal; }
/** Returns the map of oids to object datas for the given least-derived type. */ private Map getMap(ClassMetaData meta) { Map m = (Map) _metaOidMaps.get(meta); if (m != null) return m; // load datas from file and cache them Collection datas = _conf.getFileHandler().load(meta); m = new HashMap(datas.size()); for (Iterator itr = datas.iterator(); itr.hasNext(); ) { ObjectData data = (ObjectData) itr.next(); m.put(data.getId(), data); } _metaOidMaps.put(meta, m); return m; }
/** * End the datastore transaction. * * @param updates {@link ObjectData} instances to insert or update * @param deletes {@link ObjectData} instances to delete */ public synchronized void endTransaction(Collection updates, Collection deletes) { // track dirty types Set dirty = new HashSet(); try { // commit updates if (updates != null) { for (Iterator itr = updates.iterator(); itr.hasNext(); ) { ObjectData data = (ObjectData) itr.next(); ClassMetaData meta = getLeastDerived(data.getMetaData()); getMap(meta).put(data.getId(), data); dirty.add(meta); } } // commit deletes if (deletes != null) { for (Iterator itr = deletes.iterator(); itr.hasNext(); ) { ObjectData data = (ObjectData) itr.next(); ClassMetaData meta = getLeastDerived(data.getMetaData()); getMap(meta).remove(data.getId()); dirty.add(meta); } } // write changes to dirty extents back to file XMLFileHandler fh = _conf.getFileHandler(); for (Iterator itr = dirty.iterator(); itr.hasNext(); ) { ClassMetaData meta = (ClassMetaData) itr.next(); fh.store(meta, getMap(meta).values()); } } finally { // unlock store notify(); _locked = false; } }