def recover(self):
        abstract = self.getAbstract()
        contrib = abstract.as_new.contribution

        if self.getPrevStatus() is None:
            # reset all the judgments
            self._clearTrackAcceptances()
            self._clearTrackRejections()
            self._clearTrackReallocations()
            # setting the status
            if contrib is None:
                s = AbstractStatusSubmitted(abstract)
            else:
                s = AbstractStatusAccepted(abstract, self.getResponsible(), "")
        else:
            if contrib is not None and not isinstance(self.getPrevStatus(), AbstractStatusAccepted):
                s = AbstractStatusAccepted(abstract, self.getResponsible(), "")
            else:
                s = self.getPrevStatus()
        abstract.setCurrentStatus(s)
        abstract.as_new.accepted_track_id = int(contrib.track.id) if contrib.track else None
        abstract.as_new.accepted_type = contrib.type