// Copyright (C) 2008 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package com.google.gerrit.client.changes;

import com.google.gwt.i18n.client.Constants;

public interface ChangeConstants extends Constants {
  String statusLongNew();

  String statusLongMerged();

  String statusLongAbandoned();

  String statusLongDraft();

  String submittable();

  String readyToSubmit();

  String mergeConflict();

  String notCurrent();

  String isPrivate();

  String isWorkInProgress();

  String changeEdit();

  String myDashboardTitle();

  String unknownDashboardTitle();

  String workInProgress();

  String incomingReviews();

  String outgoingReviews();

  String recentlyClosed();

  String changeTableColumnSubject();

  String changeTableColumnSize();

  String changeTableColumnStatus();

  String changeTableColumnOwner();

  String changeTableColumnAssignee();

  String changeTableColumnProject();

  String changeTableColumnBranch();

  String changeTableColumnLastUpdate();

  String changeTableColumnID();

  String changeTableNone();

  String changeTableNotMergeable();

  String changeItemHelp();

  String changeTableStar();

  String changeTablePagePrev();

  String changeTablePageNext();

  String upToChangeList();

  String keyReloadChange();

  String keyNextPatchSet();

  String keyPreviousPatchSet();

  String keyReloadSearch();

  String keyPublishComments();

  String keyEditTopic();

  String keyAddReviewers();

  String keyExpandAllMessages();

  String keyCollapseAllMessages();

  String patchTableColumnName();

  String patchTableColumnComments();

  String patchTableColumnSize();

  String commitMessage();

  String mergeList();

  String patchTablePrev();

  String patchTableNext();

  String patchTableOpenDiff();

  String approvalTableEditAssigneeHint();

  String approvalTableAddReviewerHint();

  String approvalTableAddManyReviewersConfirmationDialogTitle();

  String changeInfoBlockUploaded();

  String changeInfoBlockUpdated();

  String messageNoAuthor();

  String sideBySide();

  String unifiedDiff();

  String buttonRevertChangeSend();

  String headingRevertMessage();

  String revertChangeTitle();

  String buttonCherryPickChangeSend();

  String headingCherryPickBranch();

  String cherryPickCommitMessage();

  String cherryPickTitle();

  String moveChangeSend();

  String headingMoveBranch();

  String moveChangeMessage();

  String moveTitle();

  String buttonRebaseChangeSend();

  String rebaseConfirmMessage();

  String rebaseNotPossibleMessage();

  String rebasePlaceholderMessage();

  String rebaseTitle();

  String baseDiffItem();

  String autoMerge();

  String pagedChangeListPrev();

  String pagedChangeListNext();

  String submitFailed();

  String votable();

  String pushCertMissing();

  String pushCertBad();

  String pushCertOk();

  String pushCertTrusted();
}
