class Channel(BaseFile):
    DataFileName = "data"
    SegmentMaxLength = 512 * 60 * 3
    """Represents a session experiment of a subject in the sense of BIF.
    Why use uniqueID instead of channel name as a ID reference?
    Because in some experiments, the experimenter could have more than one data
    over the same channel in the same session. So, to avoid create a new channel,
    it would be better to assign a uniqueID reference. Obviously, this is an
    akward situation. But, the file format need to be standard
    """

    def __init__(self, metadata={}):
        super(Channel, self).__init__(metadata)
        self.session = None
        self.data = None

    def setData(self, data):
        if self.data is None:
            self.data = SegmentedData(self.SegmentMaxLength, self, self.pathname + [self.DataFileName])
        self.data.set(data)

    def getData(self, start=0, end=None):
        if self.data is None:
            self.data = SegmentedData(self.SegmentMaxLength, self, self.pathname + [self.DataFileName])
        return self.data.get(start, end)

    def write(self):
        """Write the content inside the archive provide."""
        super(Channel, self).write()
        self.writeMetadata()

    def remove(self):
        """Removes the content inside the archive provide."""
        super(Channel, self).remove()
        self.writeMetadata()

    def updateHash(self):
        self.objectHash = self.data.objectHash

    def defaultMetadataValues(self):
        """Fills the minimum neccesary metadata values."""
        super(Subject, self).defaultMetadataValues()
        self.metadata.setdefault("manufacturer", "?")
        self.metadata.setdefault("label", "?")
        self.metadata.setdefault("unit", "?")
        self.metadata.setdefault("time-offset", 0)
        self.metadata.setdefault("impedance", 0)
        self.metadata.setdefault("sampling-rate", 0)
        self.metadata.setdefault("filters", [])

    @property
    def archiver(self):
        return self.session.archiver

    @property
    def pathname(self):
        return self.session.pathname + ["CHANNEL-" + self.uniqueID]
 def getData(self, start=0, end=None):
     if self.data is None:
         self.data = SegmentedData(self.SegmentMaxLength, self, self.pathname + [self.DataFileName])
     return self.data.get(start, end)
 def setData(self, data):
     if self.data is None:
         self.data = SegmentedData(self.SegmentMaxLength, self, self.pathname + [self.DataFileName])
     self.data.set(data)