001: /*
002: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
003: *
004: * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
005: *
006: * The contents of this file are subject to the terms of either the GNU
007: * General Public License Version 2 only ("GPL") or the Common
008: * Development and Distribution License("CDDL") (collectively, the
009: * "License"). You may not use this file except in compliance with the
010: * License. You can obtain a copy of the License at
011: * http://www.netbeans.org/cddl-gplv2.html
012: * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
013: * specific language governing permissions and limitations under the
014: * License. When distributing the software, include this License Header
015: * Notice in each file and include the License file at
016: * nbbuild/licenses/CDDL-GPL-2-CP. Sun designates this
017: * particular file as subject to the "Classpath" exception as provided
018: * by Sun in the GPL Version 2 section of the License file that
019: * accompanied this code. If applicable, add the following below the
020: * License Header, with the fields enclosed by brackets [] replaced by
021: * your own identifying information:
022: * "Portions Copyrighted [year] [name of copyright owner]"
023: *
024: * Contributor(s):
025: *
026: * Portions Copyrighted 2007 Sun Microsystems, Inc.
027: */
028: package org.netbeans.modules.subversion.ui.update;
029:
030: import java.io.File;
031: import java.util.regex.Matcher;
032: import java.util.regex.Pattern;
033:
034: /**
035: *
036: *
037: * @author Tomas Stupka
038: */
039: public class FileUpdateInfo {
040:
041: /**
042: * A Added
043: * D Deleted
044: * U Updated
045: * C Conflict
046: * G Merged
047: */
048: private static final String KNOWN_ACTIONS = "ADUCG ";
049:
050: public static int ACTION_TYPE_FILE = 1;
051: public static int ACTION_TYPE_PROPERTY = 2;
052:
053: public static int ACTION_ADDED = 4;
054: public static int ACTION_DELETED = 8;
055: public static int ACTION_UPDATED = 16;
056: public static int ACTION_CONFLICTED = 32;
057: public static int ACTION_MERGED = 64;
058: public static int ACTION_CONFLICTED_RESOLVED = 128;
059:
060: public static int ACTION_LOCK_BROKEN = 256;
061:
062: private final File file;
063: private final int action;
064:
065: private static final Pattern pattern = Pattern
066: .compile("^([ADUCG ])([ADUCG ])([B ]) (.+)$");
067:
068: FileUpdateInfo(File file, int action) {
069: this .file = file;
070: this .action = action;
071: }
072:
073: public File getFile() {
074: return file;
075: }
076:
077: public int getAction() {
078: return action;
079: }
080:
081: public static FileUpdateInfo[] createFromLogMsg(String log) {
082: Matcher m = pattern.matcher(log);
083: if (!m.matches()) {
084: return null;
085: }
086:
087: String fileActionValue = m.group(1);
088: String propertyActionValue = m.group(2);
089: String broken = m.group(3);
090: String filePath = m.group(4);
091: if (KNOWN_ACTIONS.indexOf(fileActionValue) < 0
092: || KNOWN_ACTIONS.indexOf(propertyActionValue) < 0) {
093: return null;
094: }
095:
096: FileUpdateInfo[] fui = new FileUpdateInfo[2];
097: int fileAction = parseAction(fileActionValue.charAt(0))
098: | (broken.equals("B") ? ACTION_LOCK_BROKEN : 0);
099: int propertyAction = parseAction(propertyActionValue.charAt(0));
100: fui[0] = fileAction != 0 ? new FileUpdateInfo(
101: new File(filePath), fileAction | ACTION_TYPE_FILE)
102: : null;
103: fui[1] = propertyAction != 0 ? new FileUpdateInfo(new File(
104: filePath), propertyAction | ACTION_TYPE_PROPERTY)
105: : null;
106: return fui;
107: }
108:
109: private static int parseAction(char actionChar) {
110: switch (actionChar) {
111: case 'A':
112: return ACTION_ADDED;
113: case 'D':
114: return ACTION_DELETED;
115: case 'U':
116: return ACTION_UPDATED;
117: case 'C':
118: return ACTION_CONFLICTED;
119: case 'G':
120: return ACTION_MERGED;
121: }
122: return 0;
123: }
124: }
|