summaryrefslogtreecommitdiff
path: root/plugins/svn4idea/src/org/jetbrains/idea/svn/history/LogEntryPath.java
blob: 41215f71f76ee6480b1e87c2c8133d530d7d6904 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
/*
 * Copyright 2000-2014 JetBrains s.r.o.
 *
 * 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 org.jetbrains.idea.svn.history;

import org.jetbrains.annotations.NotNull;
import org.jetbrains.idea.svn.api.BaseNodeDescription;
import org.jetbrains.idea.svn.api.NodeKind;
import org.jetbrains.idea.svn.commandLine.CommandUtil;
import org.tmatesoft.svn.core.SVNLogEntryPath;

import javax.xml.bind.annotation.*;

/**
 * @author Konstantin Kolosovsky.
 */
public class LogEntryPath extends BaseNodeDescription {

  private final String myPath;
  private final char myType;
  private final String myCopyPath;
  private final long myCopyRevision;

  @NotNull
  public static LogEntryPath.Builder create(@NotNull SVNLogEntryPath path) {
    return new LogEntryPath.Builder().setPath(path.getPath()).setType(path.getType()).setCopyFromPath(
      path.getCopyPath()).setCopyFromRevision(path.getCopyRevision()).setKind(NodeKind.from(path.getKind()));
  }

  public LogEntryPath(@NotNull LogEntryPath.Builder builder) {
    super(builder.kind);
    myPath = builder.path;
    myType = CommandUtil.getStatusChar(builder.action);
    myCopyPath = builder.copyFromPath;
    myCopyRevision = builder.copyFromRevision;
  }

  public String getCopyPath() {
    return myCopyPath;
  }

  public long getCopyRevision() {
    return myCopyRevision;
  }

  public String getPath() {
    return myPath;
  }

  public char getType() {
    return myType;
  }

  @NotNull
  public NodeKind getKind() {
    return myKind;
  }

  @XmlAccessorType(XmlAccessType.NONE)
  // type explicitly specified not to conflict with LogEntry.Builder
  @XmlType(name = "logentrypath")
  public static class Builder {

    // empty string could be here if repository was < 1.6 when committing (see comments in schema for svn client xml output , in
    // svn source code repository) - this will result in kind = NodeKind.UNKNOWN
    @XmlAttribute(name = "kind", required = true)
    private NodeKind kind;

    @XmlAttribute(name = "action")
    private String action;

    @XmlAttribute(name = "copyfrom-path")
    private String copyFromPath;

    @XmlAttribute(name = "copyfrom-rev")
    private long copyFromRevision;

    @XmlValue
    private String path;

    public String getPath() {
      return path;
    }

    @NotNull
    public Builder setKind(@NotNull NodeKind kind) {
      this.kind = kind;
      return this;
    }

    @NotNull
    public Builder setType(char type) {
      this.action = String.valueOf(type);
      return this;
    }

    @NotNull
    public Builder setCopyFromPath(String copyFromPath) {
      this.copyFromPath = copyFromPath;
      return this;
    }

    @NotNull
    public Builder setCopyFromRevision(long copyFromRevision) {
      this.copyFromRevision = copyFromRevision;
      return this;
    }

    @NotNull
    public Builder setPath(String path) {
      this.path = path;
      return this;
    }

    @NotNull
    public LogEntryPath build() {
      return new LogEntryPath(this);
    }
  }
}