001: /*
002: * ====================================================================
003: * Copyright (c) 2004-2008 TMate Software Ltd. All rights reserved.
004: *
005: * This software is licensed as described in the file COPYING, which
006: * you should have received as part of this distribution. The terms
007: * are also available at http://svnkit.com/license.html
008: * If newer versions of this license are posted there, you may use a
009: * newer version instead, at your option.
010: * ====================================================================
011: */
012: package org.tmatesoft.svn.core.internal.wc;
013:
014: import java.io.File;
015: import java.util.StringTokenizer;
016:
017: import org.tmatesoft.svn.core.SVNErrorCode;
018: import org.tmatesoft.svn.core.SVNErrorMessage;
019: import org.tmatesoft.svn.core.SVNException;
020: import org.tmatesoft.svn.core.SVNURL;
021:
022: /**
023: * @version 1.1.1
024: * @author TMate Software Ltd.
025: */
026: public class SVNExternalInfo {
027:
028: private String myPath;
029: private File myFile;
030: private SVNURL myOldExternalURL;
031: private long myOldExternalRevision;
032: private SVNURL myNewExternalURL;
033: private long myNewExternalRevision;
034: private String myOwnerPath;
035:
036: public SVNExternalInfo(String dirPath, File file, String path,
037: SVNURL oldURL, long oldRev) {
038: myFile = file;
039: myPath = path;
040: myOwnerPath = dirPath;
041: myOldExternalURL = oldURL;
042: myOldExternalRevision = oldRev;
043: }
044:
045: public String getOwnerPath() {
046: return myOwnerPath;
047: }
048:
049: public void setNewExternal(SVNURL newURL, long newRev) {
050: myNewExternalRevision = newRev;
051: myNewExternalURL = newURL;
052: }
053:
054: public void setOldExternal(SVNURL oldURL, long oldRev) {
055: myOldExternalRevision = oldRev;
056: myOldExternalURL = oldURL;
057: }
058:
059: public String getPath() {
060: return myPath;
061: }
062:
063: public File getFile() {
064: return myFile;
065: }
066:
067: public boolean isModified() {
068: return !isEquals();
069: }
070:
071: private boolean isEquals() {
072: if (myOldExternalURL == myNewExternalURL) {
073: return myOldExternalRevision == myNewExternalRevision;
074: }
075: if (myOldExternalURL == null || myNewExternalURL == null) {
076: return true;
077: }
078: if (myOldExternalURL.equals(myNewExternalURL)) {
079: return myOldExternalRevision == myNewExternalRevision;
080: }
081:
082: return false;
083: }
084:
085: public long getNewRevision() {
086: return myNewExternalRevision;
087: }
088:
089: public SVNURL getNewURL() {
090: return myNewExternalURL;
091: }
092:
093: public SVNURL getOldURL() {
094: return myOldExternalURL;
095: }
096:
097: public long getOldRevision() {
098: return myOldExternalRevision;
099: }
100:
101: public String toString() {
102: StringBuffer sb = new StringBuffer();
103: sb.append(myPath + " : ");
104: sb.append(myNewExternalURL);
105: if (myNewExternalRevision >= 0) {
106: sb.append("(" + myNewExternalRevision + ")");
107: }
108: if (isModified()) {
109: sb.append(" [ ");
110: sb.append(myOldExternalURL);
111: if (myOldExternalRevision >= 0) {
112: sb.append("(" + myOldExternalRevision + ")");
113: }
114: sb.append(" ]");
115: }
116: return sb.toString();
117: }
118:
119: public static void checkPath(String path) throws SVNException {
120: File file = new File(path);
121: if (file.isAbsolute()) {
122: SVNErrorMessage err = SVNErrorMessage
123: .create(
124: SVNErrorCode.CLIENT_INVALID_EXTERNALS_DESCRIPTION,
125: "Invalid property 'svn:externals': target involves '.' or '..' or is absolute path");
126: SVNErrorManager.error(err);
127: }
128: path = path.replace(File.separatorChar, '/');
129: for (StringTokenizer tokens = new StringTokenizer(path, "/"); tokens
130: .hasMoreTokens();) {
131: String token = tokens.nextToken();
132: if ("".equals(token) || ".".equals(token)
133: || "..".equals(token)) {
134: SVNErrorMessage err = SVNErrorMessage
135: .create(
136: SVNErrorCode.CLIENT_INVALID_EXTERNALS_DESCRIPTION,
137: "Invalid property 'svn:externals': target involves '.' or '..' or is absolute path");
138: SVNErrorManager.error(err);
139: }
140: }
141: }
142: }
|