/* * ==================================================================== * 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 org.tmatesoft.svn.core.SVNException; import org.tmatesoft.svn.core.SVNProperty; import org.tmatesoft.svn.core.SVNProperties; import org.tmatesoft.svn.core.SVNPropertyValue; /** * @version 1.3 * @author TMate Software Ltd. */ public abstract class SVNProperties14 extends SVNVersionedProperties { private SVNAdminArea14 myAdminArea; private String myEntryName; public SVNProperties14(SVNProperties props, SVNAdminArea14 adminArea, String entryName) { super(props); myAdminArea = adminArea; myEntryName = entryName; } public boolean containsProperty(String name) throws SVNException { SVNProperties propsMap = getProperties(); if (propsMap != null && propsMap.containsName(name)) { return true; } SVNEntry entry = myAdminArea.getEntry(myEntryName, true); if (entry == null) { return false; } String[] cachableProps = entry.getCachableProperties(); if (cachableProps != null && getIndex(cachableProps, name) >= 0) { String[] presentProps = entry.getPresentProperties(); if (presentProps == null || getIndex(presentProps, name) < 0) { return false; } return true; } if (!isEmpty()) { SVNProperties props = loadProperties(); return props.containsName(name); } return false; } public SVNPropertyValue getPropertyValue(String name) throws SVNException { if (getProperties() != null && getProperties().containsName(name)) { return getProperties().getSVNPropertyValue(name); } SVNEntry entry = myAdminArea.getEntry(myEntryName, true); if (entry != null) { String[] cachableProps = entry.getCachableProperties(); if (cachableProps != null && getIndex(cachableProps, name) >= 0) { String[] presentProps = entry.getPresentProperties(); if (presentProps == null || getIndex(presentProps, name) < 0) { return null; } if (SVNProperty.isBooleanProperty(name)) { return SVNProperty.getValueOfBooleanProperty(name); } } } SVNProperties props = loadProperties(); if (!isEmpty()) { return props.getSVNPropertyValue(name); } return null; } //TODO: this is not a good approach, however don't want to //sort the original array to use it with Arrays.binarySearch(), //since there's a risk to lose the order elements are stored in //the array and written to the file. Maybe the storage order is //important for somewhat somewhere... private int getIndex(String[] array, String element) { if (array == null || element == null) { return -1; } for(int i = 0; i < array.length; i++){ if (element.equals(array[i])) { return i; } } return -1; } protected SVNVersionedProperties wrap(SVNProperties properties) { return new SVNProperties13(properties); } }