All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines
Public Types | Public Member Functions | Static Public Member Functions
GeopsyCore::MetaDataFactory Class Reference

Brief description of class still missing. More...

#include <MetaDataFactory.h>

Inheritance diagram for GeopsyCore::MetaDataFactory:
QGpCoreTools::XMLClassFactory

List of all members.

Public Types

enum  StandardData {
  ID = 0, T0, DeltaT, NSamples,
  ReceiverX, ReceiverY, ReceiverZ, SourceX,
  SourceY, SourceZ, Name, Type,
  FileNumber, NumberInFile, TimeReference, FileName,
  Duration, EndTime, Component, MaximumAmplitude,
  AverageAmplitude, IsOriginalFile, SamplingFrequency, Pointer,
  CountPerVolt, VoltPerCount, VoltPerUnit, UnitPerVolt,
  CountPerUnit, UnitPerCount, AmplitudeUnit, SampleSize,
  HeaderModified, SourceReceiverDistance, SourceReceiverAzimuth, SourceReceiverRoughAzimuth,
  ShortFileName, FileFormat, Dummy, DataCount
}

Public Member Functions

void addScriptProperties (SignalHeaderObject *sig) const
QString baseName (const MetaDataIndex &index) const
int count (const MetaDataIndex &index) const
MetaDatacreate (int id) const
MetaDatacreate (const QString &tag) const
MetaDataIndex index (const QString &name) const
bool isReadOnly (const MetaDataIndex &index) const
bool isStored (const MetaDataIndex &index) const
 MetaDataFactory ()
QString name (const MetaDataIndex &index) const
int registerClass (const QString &tag, XMLClassCreator *creator)
QList< MetaDataIndexregisteredData () const
QStringList registeredNames () const
void registerScriptTypes (QScriptEngine *engine) const
QString title (const MetaDataIndex &index) const

Static Public Member Functions

static void init ()
static MetaDataFactoryinstance ()

Detailed Description

Brief description of class still missing.

Full description of class still missing


Member Enumeration Documentation

Enumerator:
ID 
T0 
DeltaT 
NSamples 
ReceiverX 
ReceiverY 
ReceiverZ 
SourceX 
SourceY 
SourceZ 
Name 
Type 
FileNumber 
NumberInFile 
TimeReference 
FileName 
Duration 
EndTime 
Component 
MaximumAmplitude 
AverageAmplitude 
IsOriginalFile 
SamplingFrequency 
Pointer 
CountPerVolt 
VoltPerCount 
VoltPerUnit 
UnitPerVolt 
CountPerUnit 
UnitPerCount 
AmplitudeUnit 
SampleSize 
HeaderModified 
SourceReceiverDistance 
SourceReceiverAzimuth 
SourceReceiverRoughAzimuth 
ShortFileName 
FileFormat 
Dummy 
DataCount 

Constructor & Destructor Documentation

References DataCount, and QGpCoreTools::XMLClassFactory::newId().

Referenced by init().

  {
    // Register standard names
    for(int i=0; i<DataCount; i++) {
      int id=newId();
      ASSERT(id==i);
      _names.insert(standardName(static_cast<StandardData>(id)), MetaDataIndex(id, 0, 0));
    }
  }

Member Function Documentation

References GeopsyCore::MetaData::addScriptProperties(), create(), and QGpCoreTools::XMLClassFactory::registeredIds().

  {
    QList<int> list=registeredIds();
    for(QList<int>::iterator it=list.begin(); it!=list.end(); it++) {
      MetaData * d=create(*it);
      d->addScriptProperties(sig);
      delete d;
    }
  }
QString GeopsyCore::MetaDataFactory::baseName ( const MetaDataIndex index) const

Converts an index into a variable name excluding array index.

References GeopsyCore::MetaData::baseName(), create(), DataCount, GeopsyCore::MetaDataIndex::id(), GeopsyCore::MetaDataIndex::isValid(), and GeopsyCore::MetaDataIndex::subId().

  {
    if(index.isValid()) {
      if(index.id()<DataCount) {
        // No array in standard names, identical to name()
        return standardName(static_cast<StandardData>(index.id()));
      } else {
        MetaData * d=create(index.id());
        if(d) {
          QString n=d->baseName(index.subId());
          delete d;
          return n;
        }
      }
    }
    return "Dummy";
  }
int GeopsyCore::MetaDataFactory::count ( const MetaDataIndex index) const

References GeopsyCore::MetaData::count(), create(), DataCount, GeopsyCore::MetaDataIndex::id(), GeopsyCore::MetaDataIndex::subId(), and TRACE.

  {
    TRACE;
    if(index.id()<DataCount) {
      return 1;
    } else {
      MetaData * d=create(index.id());
      if(d) {
        int c=d->count(index.subId());
        delete d;
        return c;
      }
    }
    return 0;
  }
MetaData * GeopsyCore::MetaDataFactory::create ( int  id) const [inline]

Returns a new class corresponding to id or null if it is not registered.

Reimplemented from QGpCoreTools::XMLClassFactory.

Referenced by addScriptProperties(), baseName(), count(), create(), GeopsyCore::MetaDataMap::data(), isReadOnly(), isStored(), name(), registerScriptTypes(), title(), and GeopsyCore::SharedMetaData::xml_member().

  {
    return  static_cast<MetaData *>(XMLClassFactory::create(id));
  }
MetaData * GeopsyCore::MetaDataFactory::create ( const QString &  tag) const [inline]

Returns a new class corresponding to tag or null if it is not registered.

Reimplemented from QGpCoreTools::XMLClassFactory.

References create().

  {
    return  static_cast<MetaData *>(XMLClassFactory::create(tag));
  }
MetaDataIndex GeopsyCore::MetaDataFactory::index ( const QString &  name) const

Convert a name (eventually including an array index) to a MetaDataIndex. Returns an invalid index if name cannot be recognized.

References QGpCoreTools::endl(), GeopsyCore::MetaDataIndex::setIndex(), and QGpCoreTools::tr().

Referenced by GeopsyCore::SubSignalPool::importTable(), GeopsyCore::MetaDataFieldList::readRegistry(), and GeopsyCore::AsciiSignalFormatRule::xml_setProperty().

  {
    int is=name.lastIndexOf("[");
    int ie=name.lastIndexOf("]");
    MetaDataIndex index;
    if(is<ie && is>-1) {
      QMap<QString, MetaDataIndex>::const_iterator it;
      it=_names.find(name.left(is));
      if(it!=_names.end()) {
        index=it.value();
        QString arg=name.mid(is+1, ie-is-1);
        if(arg[0]=='\"') {
          arg=arg.mid(1, arg.count()-2);
        }
        index.setIndex(arg);
      } else {
        App::stream() << tr("Meta data '%1': unrecognized name, missing plugin?").arg(name) << endl;
        return MetaDataIndex();
      }
    } else {
      QMap<QString, MetaDataIndex>::const_iterator it;
      it=_names.find(name);
      if(it!=_names.end()) {
        index=it.value();
      } else {
        App::stream() << tr("Meta data '%1': unrecognized name, missing plugin?").arg(name) << endl;
        return MetaDataIndex();
      }
    }
    return index;
  }

References MetaDataFactory(), and QGpCoreTools::XMLClassFactory::registerFactory().

  {
    if(!_self) {
      _self=new MetaDataFactory;
      registerFactory(_self); // Required for proper deletion
    }
  }

References AmplitudeUnit, AverageAmplitude, Component, CountPerUnit, CountPerVolt, create(), DataCount, DeltaT, Dummy, Duration, EndTime, FileFormat, FileName, FileNumber, HeaderModified, GeopsyCore::MetaDataIndex::id(), ID, IsOriginalFile, GeopsyCore::MetaData::isStored(), MaximumAmplitude, Name, NSamples, NumberInFile, Pointer, ReceiverX, ReceiverY, ReceiverZ, SampleSize, SamplingFrequency, ShortFileName, SourceReceiverAzimuth, SourceReceiverDistance, SourceReceiverRoughAzimuth, SourceX, SourceY, SourceZ, T0, TimeReference, TRACE, Type, UnitPerCount, UnitPerVolt, VoltPerCount, and VoltPerUnit.

  {
    TRACE;
    if(index.id()<DataCount) {
      switch (index.id()) {
      case ID:
      case T0:
      case DeltaT:
      case NSamples:
      case ReceiverX:
      case ReceiverY:
      case ReceiverZ:
      case SourceX:
      case SourceY:
      case SourceZ:
      case Name:
      case Type:
      case Component:
      case TimeReference:
      case NumberInFile:
      case CountPerVolt:
      case VoltPerUnit:
      case AmplitudeUnit:
      case ShortFileName:
        return true;
      case FileNumber:
      case FileFormat:
      case FileName:
      case Duration:
      case EndTime:
      case MaximumAmplitude:
      case AverageAmplitude:
      case IsOriginalFile:
      case VoltPerCount:
      case UnitPerVolt:
      case UnitPerCount:
      case CountPerUnit:
      case SamplingFrequency:
      case Pointer:
      case SampleSize:
      case HeaderModified:
      case SourceReceiverDistance:
      case SourceReceiverAzimuth:
      case SourceReceiverRoughAzimuth:
      case Dummy:
      case DataCount:
        return false;
      }
    } else {
      MetaData * d=create(index.id());
      if(d) {
        bool s=d->isStored();
        delete d;
        return s;
      }
    }
    return false;
  }
QString GeopsyCore::MetaDataFactory::name ( const MetaDataIndex index) const

Converts an index into a variable name including array index if any.

References create(), DataCount, GeopsyCore::MetaDataIndex::id(), GeopsyCore::MetaDataIndex::index(), GeopsyCore::MetaDataIndex::isValid(), GeopsyCore::MetaData::name(), and GeopsyCore::MetaDataIndex::subId().

Referenced by GeopsyCore::SubSignalPool::exportTable().

  {
    if(index.isValid()) {
      if(index.id()<DataCount) {
        return standardName(static_cast<StandardData>(index.id()));
      } else {
        MetaData * d=create(index.id());
        if(d) {
          QString n=d->name(index.subId(), index.index());
          delete d;
          return n;
        }
      }
    }
    return "Dummy";
  }
int GeopsyCore::MetaDataFactory::registerClass ( const QString &  tag,
XMLClassCreator creator 
)

Registers class with tag and its creator class. Returns its unique id.

Reimplemented from QGpCoreTools::XMLClassFactory.

References QGpCoreTools::XMLClassCreator::create(), QGpCoreTools::XMLClassFactory::creator(), QGpCoreTools::XMLClassFactory::id(), GeopsyCore::MetaData::setId(), and GeopsyCore::MetaData::subNames().

  {
    MetaData * d=reinterpret_cast<MetaData *>(creator->create());
    QStringList l=d->subNames();
    int n=l.count();
    // Check uniqueness of names
    for(int i=0; i<n; i++) {
      if(_names.contains(l.at(i))) {
        qWarning("Registering meta data '%s': sub name '%s'' already registered.",
               tag.toAscii().data(), l.at(i).toAscii().data());
        delete d;
        delete creator;
        return -1;
      }
    }
    int id=XMLClassFactory::registerClass(tag, creator);
    // Add all sub names
    for(int i=0; i<n; i++) {
      _names.insert(l.at(i), MetaDataIndex(id, i, 0));
    }
    // Store id
    d->setId(id);
    delete d;
    return id;
  }

Referenced by GeopsyCore::MetaDataFieldList::setAll(), and GeopsyCore::SignalExpressionContext::SignalExpressionContext().

  {
    QList<MetaDataIndex> list;
    QMap<QString, MetaDataIndex>::const_iterator it;
    for(it=_names.begin(); it!=_names.end(); it++) {
       list.append(it.value());
    }
    return list;
  }

Referenced by GeopsyCore::SignalExpressionContext::SignalExpressionContext().

  {
    QStringList list;
    QMap<QString, MetaDataIndex>::const_iterator it;
    for(it=_names.begin(); it!=_names.end(); it++) {
       list.append(it.key());
    }
    return list;
  }
void GeopsyCore::MetaDataFactory::registerScriptTypes ( QScriptEngine *  engine) const

References create(), QGpCoreTools::XMLClassFactory::registeredIds(), and GeopsyCore::MetaData::registerScriptTypes().

Referenced by GeopsyCore::SignalHeaderScript::SignalHeaderScript().

  {
    QList<int> list=registeredIds();
    for(QList<int>::iterator it=list.begin(); it!=list.end(); it++) {
      MetaData * d=create(*it);
      d->registerScriptTypes(engine);
      delete d;
    }
  }
QString GeopsyCore::MetaDataFactory::title ( const MetaDataIndex index) const

References AmplitudeUnit, AverageAmplitude, Component, CountPerUnit, CountPerVolt, create(), DataCount, DeltaT, Dummy, Duration, EndTime, FileFormat, FileName, FileNumber, HeaderModified, GeopsyCore::MetaDataIndex::id(), ID, GeopsyCore::MetaDataIndex::index(), IsOriginalFile, GeopsyCore::MetaDataIndex::isValid(), MaximumAmplitude, Name, NSamples, NumberInFile, Pointer, ReceiverX, ReceiverY, ReceiverZ, SampleSize, SamplingFrequency, ShortFileName, SourceReceiverAzimuth, SourceReceiverDistance, SourceReceiverRoughAzimuth, SourceX, SourceY, SourceZ, GeopsyCore::MetaDataIndex::subId(), T0, TimeReference, GeopsyCore::MetaData::title(), QGpCoreTools::tr(), Type, UnitPerCount, UnitPerVolt, VoltPerCount, and VoltPerUnit.

Referenced by GeopsyCore::MetaDataField::MetaDataField().

  {
    if(index.isValid()) {
      if(index.id()<DataCount) { // First custom meta data has id==DataCount
        switch(static_cast<StandardData>(index.id())) {
        case ID: return tr("ID");
        case T0: return tr("Start time");
        case DeltaT: return tr("dt");
        case NSamples: return tr("N samples");
        case ReceiverX: return tr("Rec x");
        case ReceiverY: return tr("Rec y");
        case ReceiverZ: return tr("Rec z");
        case SourceX: return tr("Src x");
        case SourceY: return tr("Src y");
        case SourceZ: return tr("Src z");
        case Name: return tr("Name");
        case Type: return tr("Type");
        case FileNumber: return tr("File number");
        case NumberInFile: return tr("Number in file");
        case TimeReference: return tr("Time reference");
        case FileName: return tr("File name");
        case FileFormat: return tr("File format");
        case ShortFileName: return tr("Short file name");
        case Duration: return tr("Duration");
        case EndTime: return tr("End time");
        case Component: return tr("Component");
        case MaximumAmplitude: return tr("Maximum amplitude");
        case AverageAmplitude: return tr("Average amplitude");
        case IsOriginalFile: return tr("Original file?");
        case SamplingFrequency: return tr("Sampling frequency");
        case Pointer: return tr("Pointer");
        case CountPerVolt: return tr("Count/Volt");
        case VoltPerCount: return tr("Volt/Count");
        case VoltPerUnit: return tr("Volt/Unit");
        case UnitPerVolt: return tr("Unit/Volt");
        case CountPerUnit: return tr("Count/Unit");
        case UnitPerCount: return tr("Unit/Count");
        case AmplitudeUnit: return tr("Amplitude unit");
        case SampleSize: return tr("Sample size (Mb)");
        case HeaderModified: return tr("Header modified?");
        case SourceReceiverDistance: return tr("Distance to source");
        case SourceReceiverAzimuth:
        case SourceReceiverRoughAzimuth: return tr("Azimuth from source");
        case Dummy: return "Dummy";
        case DataCount: break;
        }
      } else {
        MetaData * d=create(index.id());
        if(d) {
          QString t=d->title(index.subId(), index.index());
          delete d;
          return t;
        }
      }
    }
    return tr("Untitled");
  }

The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines