/******************************************************************************* * Copyright (c) 2012 IT Just working. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IT Just working - initial API and implementation *******************************************************************************/ package com.minres.scviewer.database.text; import com.minres.scviewer.database.AssociationType import com.minres.scviewer.database.DataType import com.minres.scviewer.database.ITxGenerator import com.minres.scviewer.database.ITxStream import com.minres.scviewer.database.IWaveform import com.minres.scviewer.database.IWaveformDb import com.minres.scviewer.database.IWaveformDbLoader import com.minres.scviewer.database.RelationType public class TextDbLoader implements IWaveformDbLoader{ private Long maxTime; IWaveformDb db; def streams = [] def relationTypes=[:] public TextDbLoader() { } @Override public Long getMaxTime() { return maxTime; } @Override public List getAllWaves() { return new LinkedList(streams); } public Map getGeneratorsById() { TreeMap res = new TreeMap(); streams.each{TxStream stream -> stream.generators.each{res.put(it.id, id)} } return res; } static final byte[] x = "scv_tr_stream".bytes @Override boolean load(IWaveformDb db, File file) throws Exception { this.db=db this.streams=[] FileInputStream fis = new FileInputStream(file) byte[] buffer = new byte[x.size()] def readCnt = fis.read(buffer, 0, x.size()) fis.close() if(readCnt==x.size()) for(int i=0; i def tokens = line.split(/\s+/) switch(tokens[0]){ case "scv_tr_stream": case "scv_tr_generator": case "begin_attribute": case "end_attribute": if ((matcher = line =~ /^scv_tr_stream\s+\(ID (\d+),\s+name\s+"([^"]+)",\s+kind\s+"([^"]+)"\)$/)) { def id = Integer.parseInt(matcher[0][1]) def stream = new TxStream(db, id, matcher[0][2], matcher[0][3]) streams<transaction.beginTime?maxTime:transaction.beginTime endTransaction=false break case "tx_end"://matcher = line =~ /^tx_end\s+(\d+)\s+(\d+)\s+(\d+)\s+([munpf]?s)/ def id = Integer.parseInt(tokens[1]) transaction = transactionsById[id] assert Integer.parseInt(tokens[2])==transaction.generator.id transaction.endTime = Long.parseLong(tokens[3])*stringToScale(tokens[4]) transaction.generator.end_attrs_idx=0; maxTime = maxTime>transaction.endTime?maxTime:transaction.endTime endTransaction=true break case "tx_record_attribute"://matcher = line =~ /^tx_record_attribute\s+(\d+)\s+"([^"]+)"\s+(\S+)\s*=\s*(.+)$/ def id = Integer.parseInt(tokens[1]) transactionsById[id].attributes< stream.getMaxConcurrency() } } }