1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one
3 * or more contributor license agreements. See the NOTICE file
4 * distributed with this work for additional information
5 * regarding copyright ownership. The ASF licenses this file
6 * to you under the Apache License, Version 2.0 (the
7 * "License"); you may not use this file except in compliance
8 * with the License. You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing,
13 * software distributed under the License is distributed on an
14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 * KIND, either express or implied. See the License for the
16 * specific language governing permissions and limitations
17 * under the License.
18 */
19 package org.apache.maven.scm;
20
21 import java.io.Serializable;
22
23 /**
24 * TODO move to a real enum
25 * <p>
26 * Typesafe enum for file status
27 * </p>
28 * <p>
29 * There are two types of status defined in this class: <br>
30 * 1) Status: Changes in the working tree, not yet committed to the repository eg. MODIFIED <br>
31 * 2) Transaction: The file is part of some transaction with the repository eg. CHECKED_IN
32 * </p>
33 *
34 * @author <a href="mailto:trygvis@inamo.no">Trygve Laugstøl</a>
35 *
36 */
37 public final class ScmFileStatus implements Serializable {
38 private static final long serialVersionUID = -7840223279162817915L;
39
40 /**
41 * File is added to the working tree and does not yet exist in the repository
42 */
43 public static final ScmFileStatus ADDED = new ScmFileStatus("added");
44
45 /**
46 * File is removed from the working tree thus not revisioned anymore.<br>
47 * The file is still present in the repository.<br>
48 * The file could be deleted from the filesystem depending on the provider.
49 */
50 public static final ScmFileStatus DELETED = new ScmFileStatus("deleted");
51
52 /**
53 * The file has been modified in the working tree.
54 */
55 public static final ScmFileStatus MODIFIED = new ScmFileStatus("modified");
56
57 /**
58 * The file has been renamed or moved in the working tree.
59 * @since 1.7
60 */
61 public static final ScmFileStatus RENAMED = new ScmFileStatus("renamed");
62
63 /**
64 * The file has been copied in the working tree.
65 * @since 1.7
66 */
67 public static final ScmFileStatus COPIED = new ScmFileStatus("copied");
68
69 /**
70 * The file is missing in the working tree.
71 */
72 public static final ScmFileStatus MISSING = new ScmFileStatus("missing");
73
74 /**
75 * File from working tree is checked into the repository
76 */
77 public static final ScmFileStatus CHECKED_IN = new ScmFileStatus("checked-in");
78
79 /**
80 * File is checked out from the repository and into the working tree
81 */
82 public static final ScmFileStatus CHECKED_OUT = new ScmFileStatus("checked-out");
83
84 /**
85 * The file in the working tree has differences to the one in repository that
86 * conflicts ie. it cannot automatically be merged.
87 */
88 public static final ScmFileStatus CONFLICT = new ScmFileStatus("conflict");
89
90 /**
91 * The file in the working tree has been updated with changes from the repository.
92 */
93 public static final ScmFileStatus PATCHED = new ScmFileStatus("patched");
94
95 /**
96 * The file is added, removed or updated from the repository, thus its
97 * up-to-date with the version in the repository. See also isUpdate()
98 */
99 public static final ScmFileStatus UPDATED = new ScmFileStatus("updated");
100
101 /**
102 * The file is part of a tag.
103 */
104 public static final ScmFileStatus TAGGED = new ScmFileStatus("tagged");
105
106 /**
107 * The file is locked.
108 */
109 public static final ScmFileStatus LOCKED = new ScmFileStatus("locked");
110
111 /**
112 * The file is in the working tree but is not versioned and not ignored either.
113 */
114 public static final ScmFileStatus UNKNOWN = new ScmFileStatus("unknown");
115
116 /**
117 * @since 1.5
118 * The file is being edited
119 */
120 public static final ScmFileStatus EDITED = new ScmFileStatus("edit");
121
122 /**
123 * The status name
124 */
125 private final String name;
126
127 private ScmFileStatus(String name) {
128 this.name = name;
129 }
130
131 /** {@inheritDoc} */
132 public String toString() {
133 return name;
134 }
135
136 /**
137 * There are changes in the working tree that are not committed to the repository, or <br>
138 * the file is unknown for the working tree.
139 *
140 * @return true on changes in the working tree or if the file is unknown.
141 */
142 public boolean isStatus() {
143 return this == UNKNOWN || isDiff();
144 }
145
146 /**
147 * There are changes in the working tree that are not committed to the repository. <br>
148 *
149 * @return true on changes in the working tree
150 */
151 public boolean isDiff() {
152 return this == ADDED || this == DELETED || this == MODIFIED;
153 }
154
155 /**
156 * @return true if the file was part of a transaction with the repository.
157 */
158 public boolean isTransaction() {
159 return this == CHECKED_IN || this == CHECKED_OUT || this == LOCKED || this == TAGGED || isUpdate();
160 }
161
162 /**
163 * File is part of an update transaction with the repository.<br>
164 * Note: ADDED and REMOVED are not an update status since they indicates
165 * that the working tree has changed.<br>
166 * An update indicates the opposite, that the repository was changed compared to
167 * the working tree and that it is now synchronized unless there are conflicts.
168 *
169 * @return true if the status is conflict, updated or patched.
170 */
171 public boolean isUpdate() {
172 return this == CONFLICT || this == UPDATED || this == PATCHED;
173 }
174 }