/*
* ====================================================================
* Copyright (c) 2004-2012 TMate Software Ltd. All rights reserved.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
* are also available at http://svnkit.com/license.html.
* If newer versions of this license are posted there, you may use a
* newer version instead, at your option.
* ====================================================================
*/
package org.tmatesoft.svn.core.internal.wc.admin;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.Writer;
import java.util.Map;
import java.util.Set;
import org.tmatesoft.svn.core.SVNDepth;
import org.tmatesoft.svn.core.SVNException;
import org.tmatesoft.svn.core.SVNProperty;
import org.tmatesoft.svn.core.internal.util.SVNHashSet;
/**
* @version 1.3
* @author TMate Software Ltd.
*/
public class SVNAdminArea15 extends SVNAdminArea14 {
public static final int WC_FORMAT = SVNAdminArea15Factory.WC_FORMAT;
protected static final String ATTRIBUTE_KEEP_LOCAL = "keep-local";
private static final Set INAPPLICABLE_PROPERTIES = new SVNHashSet();
static {
INAPPLICABLE_PROPERTIES.add(SVNProperty.FILE_EXTERNAL_PATH);
INAPPLICABLE_PROPERTIES.add(SVNProperty.FILE_EXTERNAL_REVISION);
INAPPLICABLE_PROPERTIES.add(SVNProperty.FILE_EXTERNAL_PEG_REVISION);
INAPPLICABLE_PROPERTIES.add(SVNProperty.TREE_CONFLICT_DATA);
}
public SVNAdminArea15(File dir) {
super(dir);
}
public int getFormatVersion() {
return WC_FORMAT;
}
protected boolean readExtraOptions(BufferedReader reader, SVNEntry entry) throws SVNException, IOException {
String line = reader.readLine();
if (isEntryFinished(line)) {
return true;
}
String changelist = parseString(line);
if (changelist != null) {
entry.setChangelistName(changelist);
}
line = reader.readLine();
if (isEntryFinished(line)) {
return true;
}
boolean keepLocal = parseBoolean(line, ATTRIBUTE_KEEP_LOCAL);
if (keepLocal) {
entry.setKeepLocal(keepLocal);
}
line = reader.readLine();
if (isEntryFinished(line)) {
return true;
}
String workingSize = parseString(line);
if (workingSize != null) {
try {
long size = Long.parseLong(workingSize);
entry.setWorkingSize(size);
} catch (NumberFormatException nfe) {
entry.setWorkingSize(SVNProperty.WORKING_SIZE_UNKNOWN);
}
}
line = reader.readLine();
if (isEntryFinished(line)) {
return true;
}
String depthStr = parseValue(line);
if (depthStr == null) {
entry.setDepth(SVNDepth.INFINITY);
} else {
SVNDepth depth = SVNDepth.fromString(depthStr);
entry.setDepth(depth);
}
return false;
}
protected int writeExtraOptions(Writer writer, String entryName, SVNEntry entry, int emptyFields) throws SVNException, IOException {
emptyFields = super.writeExtraOptions(writer, entryName, entry, emptyFields);
String changelist = entry.getChangelistName();
if (writeString(writer, changelist, emptyFields)) {
emptyFields = 0;
} else {
++emptyFields;
}
boolean keepLocalAttr = entry.isKeepLocal();
if (keepLocalAttr) {
writeValue(writer, ATTRIBUTE_KEEP_LOCAL, emptyFields);
emptyFields = 0;
} else {
++emptyFields;
}
long size = entry.getWorkingSize();
String workingSize = Long.toString(size);
workingSize = "-1".equals(workingSize) ? null : workingSize;
if (writeString(writer, workingSize, emptyFields)) {
emptyFields = 0;
} else {
++emptyFields;
}
boolean isThisDir = getThisDirName().equals(entryName);
boolean isSubDir = !isThisDir && entry.isDirectory();
SVNDepth depth = entry.getDepth();
if ((isSubDir && depth != SVNDepth.EXCLUDE) || depth == SVNDepth.INFINITY) {
emptyFields++;
} else {
if (writeValue(writer, depth.toString(), emptyFields)) {
emptyFields = 0;
} else {
++emptyFields;
}
}
return emptyFields;
}
protected SVNAdminArea createAdminAreaForDir(File dir) {
return new SVNAdminArea15(dir);
}
protected boolean isEntryPropertyApplicable(String propName) {
return propName != null && !INAPPLICABLE_PROPERTIES.contains(propName);
}
}